Commit 3d8a5ed6 authored by Charles Bachmeier's avatar Charles Bachmeier Committed by GitHub

feat: Support listing to Seaport v1.4 (#6094)

* upgrade seaport

* working 1.4 listing

* update OS fee to 0%

* update zone to null addr

* update var name

* rounding bug

* unused exports

---------
Co-authored-by: default avatarCharles Bachmeier <charlie@genie.xyz>
parent c3d2c438
......@@ -239,7 +239,7 @@ export const MarketplaceRow = ({
>
<FeeWrapper>
<ThemedText.BodyPrimary color="textSecondary">
{fees > 0 ? `${fees}${selectedMarkets.length > 1 ? t`% max` : '%'}` : '--%'}
{fees > 0 ? `${fees.toFixed(2)}${selectedMarkets.length > 1 ? t`% max` : '%'}` : '--%'}
</ThemedText.BodyPrimary>
</FeeWrapper>
</MouseoverTooltip>
......
export const OPENSEA_FEE_ADDRESS = '0x0000a26b00c1F0DF003000390027140000fAa719'
export const OPENSEA_DEFAULT_ZONE = '0x004c00500000ad104d7dbd00e3ae0a5c00560c00'
export const OPENSEA_DEFAULT_CROSS_CHAIN_CONDUIT_KEY =
'0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000'
export const OPENSEA_CROSS_CHAIN_CONDUIT = '0x1e0049783f008a0085193e00003d00cd54003c71'
export const OPENSEA_SEAPORT_V1_4_CONTRACT = '0x00000000000001ad428e4906ae43d8f9852d0dd6'
export const OPENSEA_KEY_TO_CONDUIT = { [OPENSEA_DEFAULT_CROSS_CHAIN_CONDUIT_KEY]: OPENSEA_CROSS_CHAIN_CONDUIT }
export const OPENSEA_DEFAULT_FEE = 0.025
export const INVERSE_BASIS_POINTS = 10000
......@@ -7,10 +7,11 @@ import { addressesByNetwork, MakerOrder, signMakerOrder, SupportedChainId } from
import { Seaport } from '@opensea/seaport-js'
import { ItemType } from '@opensea/seaport-js/lib/constants'
import { ConsiderationInputItem } from '@opensea/seaport-js/lib/types'
import { ZERO_ADDRESS } from 'constants/misc'
import {
OPENSEA_DEFAULT_CROSS_CHAIN_CONDUIT_KEY,
OPENSEA_DEFAULT_ZONE,
OPENSEA_KEY_TO_CONDUIT,
OPENSEA_SEAPORT_V1_4_CONTRACT,
} from 'nft/queries/openSea'
import ERC721 from '../../abis/erc721.json'
......@@ -21,7 +22,7 @@ import {
newX2Y2Order,
PostOpenSeaSellOrder,
} from '../queries'
import { INVERSE_BASIS_POINTS, OPENSEA_DEFAULT_FEE, OPENSEA_FEE_ADDRESS } from '../queries/openSea'
import { INVERSE_BASIS_POINTS } from '../queries/openSea'
import { ListingMarket, ListingStatus, WalletAsset } from '../types'
import { createSellOrder, encodeOrder, OfferItem, OrderPayload, signOrderData } from './x2y2'
......@@ -40,7 +41,7 @@ export const ListingMarkets: ListingMarket[] = [
},
{
name: 'OpenSea',
fee: 2.5,
fee: 0,
icon: '/nft/svgs/marketplaces/opensea.svg',
},
]
......@@ -58,14 +59,11 @@ const getConsiderationItems = (
signerAddress: string
): {
sellerFee: ConsiderationInputItem
openseaFee: ConsiderationInputItem
creatorFee?: ConsiderationInputItem
} => {
const openSeaBasisPoints = OPENSEA_DEFAULT_FEE * INVERSE_BASIS_POINTS
const creatorFeeBasisPoints = asset?.basisPoints ?? 0
const sellerBasisPoints = INVERSE_BASIS_POINTS - openSeaBasisPoints - creatorFeeBasisPoints
const sellerBasisPoints = INVERSE_BASIS_POINTS - creatorFeeBasisPoints
const openseaFee = price.mul(BigNumber.from(openSeaBasisPoints)).div(BigNumber.from(INVERSE_BASIS_POINTS)).toString()
const creatorFee = price
.mul(BigNumber.from(creatorFeeBasisPoints))
.div(BigNumber.from(INVERSE_BASIS_POINTS))
......@@ -74,7 +72,6 @@ const getConsiderationItems = (
return {
sellerFee: createConsiderationItem(sellerFee, signerAddress),
openseaFee: createConsiderationItem(openseaFee, OPENSEA_FEE_ADDRESS),
creatorFee:
creatorFeeBasisPoints > 0
? createConsiderationItem(creatorFee, asset?.asset_contract?.payout_address ?? '')
......@@ -126,6 +123,7 @@ export async function signListing(
overrides: {
defaultConduitKey: OPENSEA_DEFAULT_CROSS_CHAIN_CONDUIT_KEY,
},
seaportVersion: '1.4',
})
const signerAddress = await signer.getAddress()
......@@ -135,8 +133,8 @@ export async function signListing(
case 'OpenSea':
try {
const listingInWei = parseEther(`${listingPrice}`)
const { sellerFee, openseaFee, creatorFee } = getConsiderationItems(asset, listingInWei, signerAddress)
const considerationItems = [sellerFee, openseaFee, creatorFee].filter(
const { sellerFee, creatorFee } = getConsiderationItems(asset, listingInWei, signerAddress)
const considerationItems = [sellerFee, creatorFee].filter(
(item): item is ConsiderationInputItem => item !== undefined
)
......@@ -147,21 +145,20 @@ export async function signListing(
itemType: ItemType.ERC721,
token: asset.asset_contract.address,
identifier: asset.tokenId,
amount: '1',
},
],
consideration: considerationItems,
endTime: asset.expirationTime.toString(),
zone: OPENSEA_DEFAULT_ZONE,
restrictedByZone: true,
zone: ZERO_ADDRESS,
allowPartialFills: true,
},
signerAddress
)
const order = await executeAllActions()
const seaportV14Order = { ...order, protocol_address: OPENSEA_SEAPORT_V1_4_CONTRACT }
setStatus(ListingStatus.PENDING)
const res = await PostOpenSeaSellOrder(order)
const res = await PostOpenSeaSellOrder(seaportV14Order)
res ? setStatus(ListingStatus.APPROVED) : setStatus(ListingStatus.FAILED)
return res
} catch (error) {
......
......@@ -3274,14 +3274,14 @@
mkdirp "^1.0.4"
rimraf "^3.0.2"
"@opensea/seaport-js@^1.0.2":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@opensea/seaport-js/-/seaport-js-1.0.5.tgz#f48ebf5e3bc6ff5627502616598b401c6eaf352a"
integrity sha512-WgK3Grdqf5PEQWMlSFiSFaL/j8vlJ3feSjn+frFEO0QH2MuqwlFBRUGwqK4l09o5ZtZDRRTMafgrYC6BOgBY4A==
"@opensea/seaport-js@^1.0.10":
version "1.0.10"
resolved "https://registry.yarnpkg.com/@opensea/seaport-js/-/seaport-js-1.0.10.tgz#538eed1316a99d2cf06a57fd874b719efad9c22e"
integrity sha512-k4kBmkCNYxAuB6DYRqwcGXik/8x80cHQ4r4bWWFyB0v4AxGNsqMGOwdeDiP1ajxbg4NnmdEpyA8b2p73GiaK7Q==
dependencies:
"@0xsequence/multicall" "^0.39.0"
ethers "^5.6.7"
merkletreejs "^0.2.31"
merkletreejs "^0.3.9"
"@openzeppelin/contracts@3.4.1-solc-0.7-2":
version "3.4.1-solc-0.7-2"
......@@ -13962,10 +13962,10 @@ merge@2.1.0:
resolved "https://registry.npmjs.org/merge/-/merge-2.1.0.tgz"
integrity sha512-TcuhVDV+e6X457MQAm7xIb19rWhZuEDEho7RrwxMpQ/3GhD5sDlnP188gjQQuweXHy9igdke5oUtVOXX1X8Sxg==
merkletreejs@^0.2.31:
version "0.2.32"
resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223"
integrity sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==
merkletreejs@^0.3.9:
version "0.3.9"
resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.9.tgz#cdb364a3b974a44f4eff3446522d7066e0cf95de"
integrity sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ==
dependencies:
bignumber.js "^9.0.1"
buffer-reverse "^1.0.1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment