@@ -57,6 +57,7 @@ import {
5757import { DIRECTION_MAPPING , OrderStatusV4 , TradeDirection } from './enums' ;
5858import { CONTRACT_ORDER_VALIDATOR } from './properties' ;
5959import { getWrappedNativeToken } from '../../utils/addresses' ;
60+ import { ETH_ADDRESS_AS_ERC20 } from './constants' ;
6061
6162export 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