Skip to content

Commit

Permalink
feat(@nftx/constants): new package
Browse files Browse the repository at this point in the history
  • Loading branch information
jackmellis committed Dec 16, 2022
1 parent 9c28a19 commit baac254
Show file tree
Hide file tree
Showing 36 changed files with 627 additions and 699 deletions.
Binary file modified .DS_Store
Binary file not shown.
Binary file modified packages/constants/.DS_Store
Binary file not shown.
Binary file modified packages/react/.DS_Store
Binary file not shown.
28 changes: 18 additions & 10 deletions packages/react/src/NftxProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,40 @@
import React, { createContext, ReactNode, useContext, useMemo } from 'react';
import * as web3 from '@nftx/web3';
import { Network } from '@nftx/constants';
import { JsonRpcProvider, getDefaultProvider } from '@ethersproject/providers';
import { getDefaultProvider } from '@ethersproject/providers';
import type { Provider } from '@ethersproject/providers';
import { EventsProvider } from './EventsProvider';
import type { Signer } from 'ethers';

type INftxContext = {
web3: typeof web3;
network: number;
provider: JsonRpcProvider;
provider: Provider;
signer: Signer;
};

export const NftxContext = createContext<INftxContext>({
const defaultContext = {
web3,
network: Network.Mainnet,
provider: getDefaultProvider(Network.Mainnet) as JsonRpcProvider,
});
provider: getDefaultProvider(Network.Mainnet),
signer: null,
};

export const NftxContext = createContext<INftxContext>(defaultContext);

export const NftxProvider = ({
children,
network,
provider,
network = defaultContext.network,
provider = defaultContext.provider,
signer = defaultContext.signer,
}: {
children: ReactNode;
network: number;
provider: JsonRpcProvider;
network?: number;
provider?: Provider;
signer?: Signer;
}) => {
const value = useMemo(
() => ({ network, provider, web3 }),
() => ({ network, provider, signer, web3 }),
[network, provider]
);
return (
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useApprove.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ type Args = Omit<Parameters<typeof approve>[0], 'network' | 'provider'>;
const useApprove = (opts?: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { approve },
} = useNftx();

return useTransaction(
(args: Args) => approve({ ...args, network, provider }),
(args: Args) => approve({ ...args, network, signer }),
opts
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useBuyFromVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ type Args = Omit<Parameters<typeof buyFromVault>[0], 'network' | 'provider'>;
const useBuyFromVault = (opts?: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { buyFromVault },
} = useNftx();

return useTransaction(
(args: Args) => buyFromVault({ ...args, network, provider }),
(args: Args) => buyFromVault({ ...args, network, signer }),
opts
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useMintIntoVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ type Args = Omit<Parameters<typeof mintIntoVault>[0], 'network' | 'provider'>;
const useMintIntoVault = (opts?: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { mintIntoVault },
} = useNftx();

return useTransaction(
(args: Args) => mintIntoVault({ ...args, network, provider }),
(args: Args) => mintIntoVault({ ...args, network, signer }),
opts
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useRedeemFromVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ type Args = Omit<Parameters<typeof redeemFromVault>[0], 'network' | 'provider'>;
const useRedeemFromVault = (opts: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { redeemFromVault },
} = useNftx();

return useTransaction(
(args: Args) => redeemFromVault({ ...args, network, provider }),
(args: Args) => redeemFromVault({ ...args, network, signer }),
opts
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useSellIntoVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ type Args = Omit<Parameters<typeof sellIntoVault>[0], 'network' | 'provider'>;
const useSellIntoVault = (opts: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { sellIntoVault },
} = useNftx();

return useTransaction(
(args: Args) => sellIntoVault({ ...args, network, provider }),
(args: Args) => sellIntoVault({ ...args, network, signer }),
opts
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/trade/useSwapWithVault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ type Args = Omit<Parameters<typeof swapWithVault>[0], 'network' | 'provider'>;
const useSwapWithVault = (opts: UseTransactionOptions) => {
const {
network,
provider,
signer,
web3: { swapWithVault },
} = useNftx();

return useTransaction(
(args: Args) => swapWithVault({ ...args, network, provider }),
(args: Args) => swapWithVault({ ...args, network, signer }),
opts
);
};
Expand Down
Binary file modified packages/subgraph/.DS_Store
Binary file not shown.
Binary file modified packages/web3/.DS_Store
Binary file not shown.
17 changes: 10 additions & 7 deletions packages/web3/src/tokens/fetchReservesForTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ const fetchReservesForTokens = async ({
tokenAddresses,
}: {
network: number;
tokenAddresses: Address[];
tokenAddresses?: Address[];
}) => {
const query = gql`{
tokens(
Expand Down Expand Up @@ -165,14 +165,17 @@ const fetchReservesForTokens = async ({
const response = await querySubgraph<Response>({
url: getChainConstant(SUSHI_SUBGRAPH, network),
query,
variables: {
tokenAddresses: tokenAddresses.map(toLowerCase),
},
variables: { tokenAddresses },
});

return response?.tokens?.map(
(token): TokenReserve => formatTokenReserves(token, network)
);
const reserves =
response?.tokens?.map(
(token): TokenReserve => formatTokenReserves(token, network)
) ?? [];

// TODO: handle cases where more than 1000 tokens are found

return reserves;
};

export default fetchReservesForTokens;
12 changes: 6 additions & 6 deletions packages/web3/src/trade/IsApproved.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { BigNumber } from '@ethersproject/bignumber';
import type { JsonRpcProvider } from '@ethersproject/providers';
import type { Provider } from '@ethersproject/providers';
import erc721Abi from '@nftx/constants/abis/ERC721.json';
import erc20Abi from '@nftx/constants/abis/ERC20.json';
import punkAbi from '@nftx/constants/abis/CryptoPunks.json';
Expand All @@ -17,7 +17,7 @@ const isPunkApproved = async ({
spenderAddress,
}: {
network: number;
provider: JsonRpcProvider;
provider: Provider;
tokenAddress: Address;
tokenId: string;
userAddress: Address;
Expand Down Expand Up @@ -60,7 +60,7 @@ const arePunksApproved = async ({
}: {
tokenIds: string[];
network: number;
provider: JsonRpcProvider;
provider: Provider;
spenderAddress: Address;
tokenAddress: Address;
userAddress: Address;
Expand Down Expand Up @@ -89,7 +89,7 @@ const isErc721Approved = async ({
spenderAddress,
}: {
network: number;
provider: JsonRpcProvider;
provider: Provider;
tokenAddress: Address;
userAddress: Address;
spenderAddress: Address;
Expand Down Expand Up @@ -118,7 +118,7 @@ const isErc20Approved = async ({
amount,
}: {
network: number;
provider: JsonRpcProvider;
provider: Provider;
tokenAddress: Address;
userAddress: Address;
spenderAddress: Address;
Expand Down Expand Up @@ -153,7 +153,7 @@ const isApproved = async ({
standard = tokenId || tokenIds ? 'ERC721' : 'ERC20',
}: {
network: number;
provider: JsonRpcProvider;
provider: Provider;
tokenAddress: Address;
spenderAddress: Address;
userAddress: Address;
Expand Down
35 changes: 16 additions & 19 deletions packages/web3/src/trade/approve.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import type { BigNumber } from '@ethersproject/bignumber';
import type { ContractTransaction } from '@ethersproject/contracts';
import type { JsonRpcProvider } from '@ethersproject/providers';
import erc721Abi from '@nftx/constants/abis/ERC721.json';
import punkAbi from '@nftx/constants/abis/CryptoPunks.json';
import erc20Abi from '@nftx/constants/abis/ERC20.json';
import { MaxUint256 } from '@ethersproject/constants';
import { isCryptoPunk } from '../assets';
import { getContract } from '../web3';
import type { Address } from '../web3/types';
import type { Signer } from 'ethers';

function approvePunk({
tokenId,
tokenIds,
network,
tokenAddress,
provider,
signer,
spenderAddress,
}: {
tokenId: string;
tokenIds: string[];
network: number;
tokenAddress: string;
provider: JsonRpcProvider;
signer: Signer;
spenderAddress: string;
}) {
if (!tokenId && !tokenIds?.[0]) {
Expand All @@ -30,8 +30,7 @@ function approvePunk({
const contract = getContract({
network,
address: tokenAddress,
type: 'write',
provider,
signer,
abi: punkAbi,
});
return contract.offerPunkForSaleToAddress(
Expand All @@ -44,19 +43,18 @@ function approvePunk({
function approveErc721({
network,
tokenAddress,
provider,
signer,
spenderAddress,
}: {
network: number;
tokenAddress: string;
provider: JsonRpcProvider;
signer: Signer;
spenderAddress: string;
}) {
const contract = getContract({
network,
address: tokenAddress,
type: 'write',
provider,
signer,
abi: erc721Abi,
});
return contract.setApprovalForAll(spenderAddress, true);
Expand All @@ -67,21 +65,20 @@ const approveErc1155 = approveErc721;
function approveErc20({
network,
tokenAddress,
provider,
signer,
spenderAddress,
amount,
}: {
network: number;
tokenAddress: string;
provider: JsonRpcProvider;
signer: Signer;
spenderAddress: string;
amount: BigNumber;
}) {
const contract = getContract({
network,
address: tokenAddress,
provider,
type: 'write',
signer,
abi: erc20Abi,
});
return contract.approve(spenderAddress, amount ?? MaxUint256);
Expand All @@ -94,7 +91,7 @@ async function approve({
spenderAddress,
tokenId,
tokenIds,
provider,
signer,
amount,
standard = tokenId || tokenIds ? 'ERC721' : amount ? 'ERC20' : null,
}: {
Expand All @@ -103,7 +100,7 @@ async function approve({
tokenAddress: Address;
/** The smart contract address that will be spending the token */
spenderAddress: Address;
provider: JsonRpcProvider;
signer: Signer;
tokenId?: string;
/** For ERC721/ERC1155, provide the token id or tokenIds */
tokenIds?: string[];
Expand All @@ -119,20 +116,20 @@ async function approve({
tokenIds,
network,
tokenAddress,
provider,
signer,
spenderAddress,
});
}
return approveErc721({ network, tokenAddress, provider, spenderAddress });
return approveErc721({ network, tokenAddress, signer, spenderAddress });
}
if (standard === 'ERC1155') {
return approveErc1155({ network, provider, spenderAddress, tokenAddress });
return approveErc1155({ network, signer, spenderAddress, tokenAddress });
}
if (standard === 'ERC20') {
return approveErc20({
network,
tokenAddress,
provider,
signer,
spenderAddress,
amount,
});
Expand Down
Loading

0 comments on commit baac254

Please sign in to comment.