Skip to content

Commit 1172539

Browse files
authored
Merge pull request #50 from trader-xyz/feat/handle-buy-with-eth-beter
Better handling of buying NFT with ETH (or native token)
2 parents 21b1630 + 6eb0a03 commit 1172539

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/sdk/v4/NftSwapV4.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import {
5757
import { DIRECTION_MAPPING, OrderStatusV4, TradeDirection } from './enums';
5858
import { CONTRACT_ORDER_VALIDATOR } from './properties';
5959
import { getWrappedNativeToken } from '../../utils/addresses';
60+
import { ETH_ADDRESS_AS_ERC20 } from './constants';
6061

6162
export enum SupportedChainIdsV4 {
6263
Mainnet = 1,
@@ -203,7 +204,7 @@ class NftSwapV4 implements INftSwapV4 {
203204
asset: SwappableAssetV4,
204205
walletAddress: string,
205206
approvalOverrides?: Partial<ApprovalOverrides> | undefined
206-
) => {
207+
): Promise<ApprovalStatus> => {
207208
// TODO(johnrjj) - Fix to pass thru more args...
208209
return getApprovalStatus(
209210
walletAddress,
@@ -562,12 +563,18 @@ class NftSwapV4 implements INftSwapV4 {
562563
if ('erc1155Token' in signedOrder) {
563564
// If maker is selling an NFT, taker wants to 'buy' nft
564565
if (signedOrder.direction === TradeDirection.SellNFT) {
566+
const needsEthAttached =
567+
signedOrder.erc20Token.toLowerCase() === ETH_ADDRESS_AS_ERC20;
568+
565569
return this.exchangeProxy.buyERC1155(
566570
signedOrder,
567571
signedOrder.signature,
568572
signedOrder.erc1155TokenAmount,
569573
'0x',
570-
transactionOverrides ?? {}
574+
{
575+
value: needsEthAttached ? signedOrder.erc20TokenAmount : undefined,
576+
...transactionOverrides,
577+
}
571578
);
572579
} else {
573580
// TODO(detect if erc20 token is wrapped token, then switch true. if true when not wrapped token, tx will fail)
@@ -595,17 +602,26 @@ class NftSwapV4 implements INftSwapV4 {
595602
signedOrder.erc1155TokenAmount,
596603
unwrapNativeToken,
597604
'0x',
598-
transactionOverrides ?? {}
605+
{
606+
...transactionOverrides,
607+
}
599608
);
600609
}
601610
} else if ('erc721Token' in signedOrder) {
602611
// If maker is selling an NFT, taker wants to 'buy' nft
612+
603613
if (signedOrder.direction === TradeDirection.SellNFT) {
614+
const needsEthAttached =
615+
signedOrder.erc20Token.toLowerCase() === ETH_ADDRESS_AS_ERC20;
616+
604617
return this.exchangeProxy.buyERC721(
605618
signedOrder,
606619
signedOrder.signature,
607620
'0x',
608-
transactionOverrides ?? {}
621+
{
622+
value: needsEthAttached ? signedOrder.erc20TokenAmount : undefined,
623+
...transactionOverrides,
624+
}
609625
);
610626
} else {
611627
// TODO(detect if erc20 token is wrapped token, then switch true. if true when not wrapped token, tx will fail)
@@ -631,7 +647,10 @@ class NftSwapV4 implements INftSwapV4 {
631647
fillOrderOverrides?.tokenIdToSellForCollectionOrder ??
632648
signedOrder.erc721TokenId,
633649
unwrapNativeToken,
634-
'0x'
650+
'0x',
651+
{
652+
...transactionOverrides,
653+
}
635654
);
636655
}
637656
}

0 commit comments

Comments
 (0)