I have written an anchor solana program but I don't know how to call the contract without using anchor.workspace.MintNft as anchor.Program<MintNft>
This is the test.ts but I want to implement it on a react client side
import * as anchor from "@project-serum/anchor";
// ** Comment this to use solpg imported IDL **
import { MintNft } from "../target/types/mint_nft";
describe("nft-marketplace", async () => {
const testNftTitle = "Test";
const testNftSymbol = "TEST";
const testNftUri = "https://raw.githubusercontent.com/Tkay6677/nftUri/main/example.json";
const provider = anchor.AnchorProvider.env()
const wallet = provider.wallet as anchor.Wallet;
anchor.setProvider(provider);
// ** Un-comment this to use solpg imported IDL **
// const program = new anchor.Program(
// require("../solpg/idl.json"),
// new anchor.web3.PublicKey("H2UJjAQTuVJYhaBhh6GD2KaprLBTp1vhP2aaHioya5NM"),
// );
// ** Comment this to use solpg imported IDL **
const program = anchor.workspace.MintNft as anchor.Program<MintNft>;
const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey(
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
);
it("Mint!", async () => {
// Derive the mint address and the associated token account address
const mintKeypair: anchor.web3.Keypair = anchor.web3.Keypair.generate();
const tokenAddress = await anchor.utils.token.associatedAddress({
mint: mintKeypair.publicKey,
owner: wallet.publicKey
});
console.log(`New token: ${mintKeypair.publicKey}`);
// Derive the metadata and master edition addresses
const metadataAddress = (await anchor.web3.PublicKey.findProgramAddress(
[
Buffer.from("metadata"),
TOKEN_METADATA_PROGRAM_ID.toBuffer(),
mintKeypair.publicKey.toBuffer(),
],
TOKEN_METADATA_PROGRAM_ID
))[0];
console.log("Metadata initialized");
const masterEditionAddress = (await anchor.web3.PublicKey.findProgramAddress(
[
Buffer.from("metadata"),
TOKEN_METADATA_PROGRAM_ID.toBuffer(),
mintKeypair.publicKey.toBuffer(),
Buffer.from("edition"),
],
TOKEN_METADATA_PROGRAM_ID
))[0];
console.log("Master edition metadata initialized");
// Transact with the "mint" function in our on-chain program
await program.methods.mint(
testNftTitle, testNftSymbol, testNftUri
)
.accounts({
masterEdition: masterEditionAddress,
metadata: metadataAddress,
mint: mintKeypair.publicKey,
tokenAccount: tokenAddress,
mintAuthority: wallet.publicKey,
tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
})
.signers([mintKeypair])
.rpc();
});
});