diff --git a/.changeset/lazy-balloons-bathe.md b/.changeset/lazy-balloons-bathe.md new file mode 100644 index 0000000000..f6ac979a4c --- /dev/null +++ b/.changeset/lazy-balloons-bathe.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/react": patch +--- + +Fix magic link connector not connecting to the right chain diff --git a/.changeset/mean-eyes-hammer.md b/.changeset/mean-eyes-hammer.md new file mode 100644 index 0000000000..ec981b13ce --- /dev/null +++ b/.changeset/mean-eyes-hammer.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/sdk": patch +--- + +Fix signature minting from OpenSea Royalty Filter NFT collection contracts diff --git a/packages/react/src/evm/connectors/magic.ts b/packages/react/src/evm/connectors/magic.ts index 511e90991d..91d0640572 100644 --- a/packages/react/src/evm/connectors/magic.ts +++ b/packages/react/src/evm/connectors/magic.ts @@ -62,6 +62,18 @@ export class MagicConnector extends Connector { const { apiKey, ...options } = this.options; const configuration = this.getConfiguration(); + const chains = Object.entries(this.options.rpcUrls); + if (chains.length > 1) { + console.warn( + `Magic only supports connecting to one chain at a time. Using the first chain specified in rpcUrls: ${chains[0]}.`, + ); + } + const [chainId, rpcUrl] = chains[0]; + this.options.network = { + chainId: parseInt(chainId), + rpcUrl, + }; + try { invariant( configuration, diff --git a/packages/sdk/src/evm/common/marketplace.ts b/packages/sdk/src/evm/common/marketplace.ts index 3ca1567d31..4feda70f19 100644 --- a/packages/sdk/src/evm/common/marketplace.ts +++ b/packages/sdk/src/evm/common/marketplace.ts @@ -89,13 +89,18 @@ export async function handleTokenApproval( tokenId: BigNumberish, from: string, ): Promise { - const erc165 = new Contract( + const erc165 = new ContractWrapper( + signerOrProvider, assetContract, ERC165Abi, - signerOrProvider, - ) as IERC165; - const isERC721 = await erc165.supportsInterface(InterfaceId_IERC721); - const isERC1155 = await erc165.supportsInterface(InterfaceId_IERC1155); + {}, + ); + const isERC721 = await erc165.readContract.supportsInterface( + InterfaceId_IERC721, + ); + const isERC1155 = await erc165.readContract.supportsInterface( + InterfaceId_IERC1155, + ); // check for token approval if (isERC721) { const asset = new ContractWrapper( diff --git a/packages/sdk/src/evm/core/classes/erc-721-with-quantity-signature-mintable.ts b/packages/sdk/src/evm/core/classes/erc-721-with-quantity-signature-mintable.ts index 2f0ea7f9ba..e7ab83626b 100644 --- a/packages/sdk/src/evm/core/classes/erc-721-with-quantity-signature-mintable.ts +++ b/packages/sdk/src/evm/core/classes/erc-721-with-quantity-signature-mintable.ts @@ -1,4 +1,4 @@ -import { hasFunction } from "../../common"; +import { detectContractFeature } from "../../common"; import { normalizePriceValue, setErc20Allowance } from "../../common/currency"; import { uploadOrExtractURIs } from "../../common/nft"; import { FEATURE_NFT_SIGNATURE_MINTABLE_V2 } from "../../constants/erc721-features"; @@ -22,7 +22,7 @@ import type { } from "@thirdweb-dev/contracts-js"; import { TokensMintedWithSignatureEvent } from "@thirdweb-dev/contracts-js/dist/declarations/src/SignatureDrop"; import { ThirdwebStorage } from "@thirdweb-dev/storage"; -import { BigNumber, ethers } from "ethers"; +import { BigNumber } from "ethers"; import invariant from "tiny-invariant"; /** @@ -397,17 +397,9 @@ export class Erc721WithQuantitySignatureMintable implements DetectableFeature { } private async isLegacyNFTContract() { - if (hasFunction("contractType", this.contractWrapper)) { - try { - const contractType = ethers.utils.toUtf8String( - await this.contractWrapper.readContract.contractType(), - ); - return contractType.includes("TokenERC721"); - } catch (e) { - return false; - } - } else { - return false; - } + return detectContractFeature( + this.contractWrapper, + "ERC721SignatureMintV1", + ); } }