Skip to main content

List an item

Updating an item will upload the new metadata file to IPFS, and update item attributes Royalties are listed in basis points (BPS). 100 BPS is equal to 1%. Royalties will be paid as soon as an item has been shipped.
import { mkt } from './config'

const listing = await mkt.update({
  id: '<ITEM_MARKETPLACE_ID>',

  name: 'My Item',
  description: 'This is my item',
  category: 'Clothing',
  color: 'blue',
  tags: ['sale']
  brand: 'brand',
  nftType: 'physical'
  status: 'listed',

  royalty: { 
    royaltyAmount: 300, // 3% royalty
    receiver: '0x123' 
  },
  price: 100, // $1
  quantityDiff: 1,

  images: ['image_url', File],
  primaryImageIndex: 0,
})
import type { UpdateItemInput } from './interface'

update(input: UpdateItemInput): void
export interface UpdateMetadataInput {
  id: string // item marketplace id

  name: string
  description: string
  category: string
  color: string
  tags: string[]
  brand?: string
  nftType: NftType
  status: ItemStatus

  royalty: Partial<RoyaltyConfig>,
  price: number | null, // in cents
  quantityDiff: number, // positive if more items should be minted, negative if some items should be burned

  images: (string | File)[] // urls or Files
  primaryImageIndex: number,
  video?: string
}

export interface RoyaltyConfig {
  receiver: Address
  royaltyAmount: bigint
}

export type NftType = 'physical' | 'digital'
export type ItemStatus = 'listed' | 'delist'
import { Marketplace } from '@evav/marketplace'
import { useDynamicContext, getAuthToken } from '@dynamic-labs/sdk-react-core'

const { primaryWallet } = useDynamicContext()
const walletClient = await primaryWallet?.connector?.getWalletClient()
const publicClient = await primaryWallet?.connector?.getPublicClient()
const [account] = await walletConnector.getConnectedAccounts()

// viem is required for the evav sdk
export const mkt = new Marketplace({
  walletClient,
  publicClient,
  account: account as Address,
  // Optional. If not provided, SIWE will be used instead, and you will be asked to sign a message with your wallet
  accessToken: getAuthToken(),
})
import { Marketplace } from '@evav/marketplace'
import { useWallets, usePrivy } from 'privy'
import { createWalletClient, createPublicClient, custom } from 'viem'
import { base } from 'viem/chains'

const { wallets } = useWallets();
const { user } = usePrivy();

const wallet = wallets[0]; // Replace this with your desired wallet
const provider = await wallet.getEthereumProvider()

const walletClient = createWalletClient({
  chain: base,
  transport: custom(provider),
})

const publicClient = createPublicClient({
  chain: base,
  transport: custom(provider),
})

// viem is required for the evav sdk
export const mkt = new Marketplace({
  walletClient,
  publicClient,
  account: user.linked_accounts[0].address // Replace with your desired account
})