Skip to content

Commit e1fa6e1

Browse files
authored
Adds Polygon Mumbai support to 0x v4 (#65)
* ADDS polygon mumbai support (chain 80001)
1 parent 5f54e1b commit e1fa6e1

File tree

4 files changed

+124
-3
lines changed

4 files changed

+124
-3
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"size-limit": [
4141
{
4242
"path": "dist/nft-swap-sdk.cjs.production.min.js",
43-
"limit": "290 KB"
43+
"limit": "300 KB"
4444
},
4545
{
4646
"path": "dist/nft-swap-sdk.esm.js",

src/sdk/v4/NftSwapV4.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export enum SupportedChainIdsV4 {
6969
Ropsten = 3,
7070
Ganache = 1337,
7171
Polygon = 137,
72+
PolygonMumbai = 80001,
7273
BSC = 56,
7374
Optimism = 10,
7475
Fantom = 250,
@@ -80,9 +81,9 @@ export enum SupportedChainIdsV4 {
8081
export const SupportedChainsForV4OrderbookStatusMonitoring = [
8182
SupportedChainIdsV4.Ropsten,
8283
SupportedChainIdsV4.Polygon,
84+
SupportedChainIdsV4.PolygonMumbai,
8385
SupportedChainIdsV4.Mainnet,
8486
SupportedChainIdsV4.Optimism,
85-
// SupportedChainIdsV4.Arbitrum,
8687
];
8788

8889
export interface INftSwapV4 extends BaseNftSwap {

src/sdk/v4/addresses.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"wrappedNativeToken": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"
4545
},
4646
"80001": {
47-
"exchange": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
47+
"exchange": "0x4fb72262344034e034fce3d9c701fd9213a55260",
4848
"wrappedNativeToken": "0x9c3c9283d3e44854697cd22d3faa240cfb032889"
4949
},
5050
"43114": {
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import { ethers } from 'ethers';
2+
import { NftSwapV4, SupportedChainIdsV4 } from '../../src/sdk/v4/NftSwapV4';
3+
4+
import {
5+
SignedERC721OrderStruct,
6+
SwappableAssetV4,
7+
} from '../../src/sdk/v4/types';
8+
9+
jest.setTimeout(240 * 1000);
10+
11+
const MAKER_WALLET_ADDRESS = '0xabc23F70Df4F45dD3Df4EC6DA6827CB05853eC9b';
12+
const MAKER_PRIVATE_KEY =
13+
'fc5db508b0a52da8fbcac3ab698088715595f8de9cccf2467d51952eec564ec9';
14+
// NOTE(johnrjj) - NEVER use these private keys for anything of value, testnets only!
15+
16+
const DAI_TOKEN_ADDRESS_TESTNET = '0x001b3b4d0f3714ca98ba10f6042daebf0b1b7b6f'; // https://mumbai.polygonscan.com/token/0x001b3b4d0f3714ca98ba10f6042daebf0b1b7b6f?a=0xabc23F70Df4F45dD3Df4EC6DA6827CB05853eC9b
17+
const TEST_NFT_CONTRACT_ADDRESS = '0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b'; // https://mumbai.polygonscan.com/token/0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b?a=0xabc23F70Df4F45dD3Df4EC6DA6827CB05853eC9b
18+
const RPC_TESTNET =
19+
'https://polygon-mumbai.g.alchemy.com/v2/VMBpFqjMYv2w-MWnc9df92w3R2TpMvSG';
20+
21+
const MAKER_WALLET = new ethers.Wallet(MAKER_PRIVATE_KEY);
22+
// const TAKER_WALLET = new ethers.Wallet(TAKER_PRIVATE_KEY);
23+
24+
const PROVIDER = new ethers.providers.StaticJsonRpcProvider(RPC_TESTNET);
25+
26+
const MAKER_SIGNER = MAKER_WALLET.connect(PROVIDER);
27+
// const TAKER_PROVIDER = TAKER_WALLET.connect(PROVIDER);
28+
29+
const POLYGON_MUMBAI_CHAIN_ID = SupportedChainIdsV4.PolygonMumbai;
30+
31+
const nftSwapperMaker = new NftSwapV4(
32+
MAKER_SIGNER as any,
33+
MAKER_SIGNER,
34+
POLYGON_MUMBAI_CHAIN_ID
35+
);
36+
// const nftSwapperTaker = new NftSwap(TAKER_PROVIDER as any, 4);
37+
38+
const TAKER_ASSET: SwappableAssetV4 = {
39+
type: 'ERC20',
40+
tokenAddress: DAI_TOKEN_ADDRESS_TESTNET,
41+
amount: '100000000000', // 1 DAO
42+
};
43+
const MAKER_ASSET: SwappableAssetV4 = {
44+
type: 'ERC721',
45+
tokenAddress: TEST_NFT_CONTRACT_ADDRESS,
46+
tokenId: '324295',
47+
};
48+
49+
describe('NFTSwapV4', () => {
50+
it('mumbai e2e test', async () => {
51+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
52+
53+
const v4Erc721Order = nftSwapperMaker.buildOrder(
54+
MAKER_ASSET,
55+
TAKER_ASSET,
56+
MAKER_WALLET_ADDRESS
57+
// {
58+
// // Fix dates and salt so we have reproducible tests
59+
// expiration: new Date(3000, 10, 1),
60+
// }
61+
);
62+
63+
// console.log('v4Erc721Order.nonce', v4Erc721Order.nonce.toString());
64+
65+
expect(v4Erc721Order.nonce.toString().includes('-')).toBeFalsy();
66+
67+
// const makerapprovalTx = await nftSwapperMaker.approveTokenOrNftByAsset(
68+
// MAKER_ASSET,
69+
// MAKER_WALLET_ADDRESS,
70+
// )
71+
// const makerApprovalTxHash = await (await makerapprovalTx.wait()).transactionHash
72+
// console.log('maker approval tx hash', makerApprovalTxHash)
73+
74+
// const takerApprovalTx = await nftSwapperMaker.approveTokenOrNftByAsset(
75+
// TAKER_ASSET,
76+
// MAKER_WALLET_ADDRESS,
77+
// )
78+
79+
// const takerApprovalTxHash = await (await takerApprovalTx.wait()).transactionHash
80+
// console.log('taker approval tx hash', takerApprovalTxHash)
81+
82+
const signedOrder = await nftSwapperMaker.signOrder(v4Erc721Order);
83+
84+
// Cast to assert easily
85+
const signedOrderErc1155 = signedOrder as SignedERC721OrderStruct;
86+
87+
expect(signedOrderErc1155.erc721Token).toBe(MAKER_ASSET.tokenAddress);
88+
expect(signedOrderErc1155.erc721TokenId.toString()).toBe(
89+
MAKER_ASSET.tokenId
90+
);
91+
92+
expect(signedOrderErc1155.erc20Token).toBe(TAKER_ASSET.tokenAddress);
93+
expect(signedOrderErc1155.erc20TokenAmount).toBe(TAKER_ASSET.amount);
94+
95+
expect(signedOrderErc1155.direction.toString()).toBe('0');
96+
97+
// await nftSwapperMaker.postOrder(signedOrder, SupportedChainIdsV4.PolygonMumbai);
98+
99+
// const maybeOrders = await nftSwapperMaker.getOrders({
100+
// nonce: signedOrder.nonce.toString(10),
101+
// })
102+
103+
// const maybeOrder = maybeOrders.orders[0];
104+
105+
// expect(maybeOrder.order.nonce).toEqual(signedOrder.nonce.toString(10))
106+
107+
// expect(maybeOrder.order.signature.signatureType.toString()).toEqual('2');
108+
109+
// const fillTx = await nftSwapperMaker.fillSignedOrder(maybeOrder.order);
110+
111+
// // const fillTx = await nftSwapperMaker.fillSignedOrder(signedOrder);
112+
113+
// const txReceipt = await fillTx.wait();
114+
// console.log('erc721 fill tx', txReceipt.transactionHash);
115+
116+
// expect(txReceipt.transactionHash).toBeTruthy();
117+
118+
// console.log(`Swapped on Polygon Mumbai (txHAsh: ${txReceipt.transactionIndex})`);
119+
});
120+
});

0 commit comments

Comments
 (0)