diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/Mintable.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/Mintable.tsx
index 32d3d3b7f40..7346485605b 100644
--- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/Mintable.tsx
+++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/Mintable.tsx
@@ -27,12 +27,9 @@ import { useTxNotifications } from "hooks/useTxNotifications";
import { CircleAlertIcon } from "lucide-react";
import { useCallback } from "react";
import { useForm } from "react-hook-form";
-import {
- type PreparedTransaction,
- prepareContractCall,
- sendAndConfirmTransaction,
-} from "thirdweb";
+import { type PreparedTransaction, sendAndConfirmTransaction } from "thirdweb";
import { MintableERC721, MintableERC1155 } from "thirdweb/modules";
+import { grantRoles, hasAllRoles } from "thirdweb/modules";
import { useReadContract } from "thirdweb/react";
import type { NFTMetadataInputLimited } from "types/modified-types";
import { parseAttributes } from "utils/parseAttributes";
@@ -79,10 +76,10 @@ function MintableModule(props: ModuleInstanceProps) {
contract: contract,
},
);
- const hasMinterRole = useReadContract({
+ const hasMinterRole = useReadContract(hasAllRoles, {
contract: contract,
- method: "function hasAllRoles(address user, uint256 roles) returns (bool)",
- params: [ownerAccount?.address || "", MINTER_ROLE],
+ user: ownerAccount?.address || "",
+ roles: MINTER_ROLE,
});
const isBatchMetadataInstalled = !!props.allModuleContractInfo.find(
@@ -97,10 +94,10 @@ function MintableModule(props: ModuleInstanceProps) {
}
if (!hasMinterRole.data) {
- const grantRoleTx = prepareContractCall({
+ const grantRoleTx = grantRoles({
contract,
- method: "function grantRole(address user, uint256 role) public",
- params: [ownerAccount.address || "", MINTER_ROLE],
+ user: ownerAccount.address,
+ roles: MINTER_ROLE,
});
await sendAndConfirmTransaction({
diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/module-instance.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/module-instance.tsx
index 678a7c43f18..5ac173b0891 100644
--- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/module-instance.tsx
+++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/modules/components/module-instance.tsx
@@ -31,7 +31,7 @@ export function ModuleInstance(props: ModuleInstanceProps) {
return ;
}
- if (props.contractInfo.name.includes("Mintable-ignore")) {
+ if (props.contractInfo.name.includes("Mintable")) {
return ;
}
diff --git a/packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithRole.ts b/packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithRole.ts
index e6b025a00ae..1362fc1dd6d 100644
--- a/packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithRole.ts
+++ b/packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithRole.ts
@@ -45,11 +45,14 @@ export function mintWithRole(
return generatedMint({
contract: options.contract,
asyncParams: async () => {
- const batchOfUris = await uploadOrExtractURIs(
- [options.nft],
- options.contract.client,
- );
- const baseURI = getBaseUriFromBatch(batchOfUris);
+ let baseURI = "";
+ if (options.nft) {
+ const batchOfUris = await uploadOrExtractURIs(
+ [options.nft],
+ options.contract.client,
+ );
+ baseURI = getBaseUriFromBatch(batchOfUris);
+ }
const tokenId = options.tokenId ?? maxUint256;
return {
diff --git a/packages/thirdweb/src/extensions/modules/MintableERC721/mintWithRole.ts b/packages/thirdweb/src/extensions/modules/MintableERC721/mintWithRole.ts
index a3b4ba70a48..d2ce45fb186 100644
--- a/packages/thirdweb/src/extensions/modules/MintableERC721/mintWithRole.ts
+++ b/packages/thirdweb/src/extensions/modules/MintableERC721/mintWithRole.ts
@@ -41,11 +41,14 @@ export function mintWithRole(options: BaseTransactionOptions) {
return generatedMint({
contract: options.contract,
asyncParams: async () => {
- const batchOfUris = await uploadOrExtractURIs(
- options.nfts,
- options.contract.client,
- );
- const baseURI = getBaseUriFromBatch(batchOfUris);
+ let baseURI = "";
+ if (options.nfts?.[0] !== "") {
+ const batchOfUris = await uploadOrExtractURIs(
+ options.nfts,
+ options.contract.client,
+ );
+ baseURI = getBaseUriFromBatch(batchOfUris);
+ }
return {
to: getAddress(options.to),