diff --git a/packages/react/src/trade/useApprove.ts b/packages/react/src/trade/useApprove.ts index 4ba5a2db..f6771df9 100644 --- a/packages/react/src/trade/useApprove.ts +++ b/packages/react/src/trade/useApprove.ts @@ -9,11 +9,12 @@ const useApprove = (opts?: UseTransactionOptions) => { const { provider, signer, + network, core: { approve }, } = useNftx(); return useTransaction( - (args: Args) => approve({ ...args, provider, signer }), + (args: Args) => approve({ ...args, provider, signer, network }), { description: 'Approve', ...opts, diff --git a/packages/trade/src/positions/createInventoryPosition.ts b/packages/trade/src/positions/createInventoryPosition.ts index 750b4182..7bdb4b76 100644 --- a/packages/trade/src/positions/createInventoryPosition.ts +++ b/packages/trade/src/positions/createInventoryPosition.ts @@ -1,21 +1,35 @@ import { InventoryStaking } from '@nftx/abi'; import config from '@nftx/config'; import { INVENTORY_STAKING } from '@nftx/constants'; -import { CreateInventoryPositionQuote, Provider, Signer } from '@nftx/types'; +import { + CreateInventoryPositionQuote, + Permit2Quote, + Provider, + Signer, +} from '@nftx/types'; import { getChainConstant, getContract } from '@nftx/utils'; const createInventoryPosition = ({ provider, quote: { - methodParameters: { nftAmounts, nftIds, userAddress, vaultId }, + methodParameters: { + nftAmounts, + nftIds, + userAddress, + vaultId, + vToken, + usePermit2, + }, }, signer, network = config.network, + permit2, }: { network?: number; quote: Pick; provider: Provider; signer: Signer; + permit2?: Permit2Quote; }) => { const contract = getContract({ address: getChainConstant(INVENTORY_STAKING, network), @@ -24,6 +38,20 @@ const createInventoryPosition = ({ signer, }); + // You can either dpeosit with vToken, or with NFTs + if (vToken) { + return contract.write.deposit({ + args: [ + BigInt(vaultId), + vToken, + userAddress, + (usePermit2 ? permit2?.permit2encoded : undefined) || '0x', + !!(usePermit2 && permit2), + true, + ], + }); + } + return contract.write.depositWithNFT({ args: [BigInt(vaultId), nftIds, nftAmounts, userAddress], }); diff --git a/packages/types/src/quotes.ts b/packages/types/src/quotes.ts index 2ffa63d6..60f3b3a8 100644 --- a/packages/types/src/quotes.ts +++ b/packages/types/src/quotes.ts @@ -104,16 +104,20 @@ export type WithdrawInventoryQuote = { export type CreateInventoryPositionQuoteParams = { vaultId: string; - tokenIds: [TokenId, number][] | TokenId[]; userAddress: Address; + vToken?: bigint; + usePermit2?: boolean; + tokenIds?: [TokenId, number][] | TokenId[]; }; export type CreateInventoryPositionQuote = { methodParameters: { vaultId: bigint; nftIds: bigint[]; + vToken: bigint; nftAmounts: bigint[]; userAddress: Address; + usePermit2: boolean; }; approveContracts: ApproveContract[]; }; diff --git a/packages/types/src/vaults.ts b/packages/types/src/vaults.ts index 085d8112..5532810e 100644 --- a/packages/types/src/vaults.ts +++ b/packages/types/src/vaults.ts @@ -69,8 +69,6 @@ export type Vault = { shutdownDate: number; /** The ETH price of 1 vToken (comes from vaultContract.vTokenToETH(WeiPerEther)) */ vTokenToEth: bigint; - // feeReceipts: Pick[]; - // activity: Pick; }; export type VaultActivityType =