Skip to main content

How to Mint zkSBT on Manta Pacific

  1. install zksbt JS SDK

        npm install @zksbt/jssdk
  2. initialize zksbt JS SDK

    import { ZKSbtSDK } from "@zksbt/jssdk";

    const ZKSBT_CONTRACT = "0xa44155ffbcE68C9C848f8Ea6F28C40311085125E";
    const provider = new ethers.providers.JsonRpcProvider(MANTA_RPC);
    const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
    const sdk = await ZKSbtSDK.create(wallet, ZKSBT_CONTRACT);
  3. Ask for certification

    const CATEGORY = 109n; // MANTA PACIFIC ASSET CERTIFICATE
    const ATTRIBUTE = "1";
    const URL =
    "https://npo-cdn.asmatch.xyz/MantaPacific/ETH/ETH_moreThan1.jpg";
    const claim_signature = await sdk.claimSbtSignature(CATEGORY, ATTRIBUTE);
    const request = {
    sig: claim_signature,
    publicAddress: sdk.identity.getCommitment().toString(),
    category: CATEGORY.toString(),
    attribute: ATTRIBUTE,
    url: URL,
    email: "",
    };
    const API = "https://prod.asmatch-api-npo.asmatch.xyz/pomp/premint";
    await axios.post(API, request);
  4. check certificate data

    Response data: {
    code: 0,
    message: 'success',
    data: {
    asset_id: '91856531439484927',
    attribute: '1',
    eth_address: '0x9cda03ce3a07c7494a34a9ba53cd75dd8e00c5b9',
    sig_address: '0xa7d2C348D30AD1cF527AFF6c9C56110F91BDa649',
    signature: '0x2a11462a728882e6b1f834931104d92db9aaeb6741e9668842ba6a9aac38faa613bba08265fdeb4c16af98ea96f953b135d5aa3218cbc6b0a4357550be22df1a1b',
    sbt_url: 'https://npo-cdn.asmatch.xyz/MantaPacific/ETH/ETH_moreThan1.jpg',
    verifyTimestamp: '1698631406716',
    certificate_msg: 'Sign this meesage to claim zkSBT : public address 2120648137430114184213068244856561888015650291389717374042288473592882019645 sbt category 109 sbt attribute 1 sbt id 91856531439484927 verify timestamp 1698631406716'
    }
    }
  5. send on-chain mint transaction

    const res = await sdk.mint(
    CATEGORY,
    ATTRIBUTE,
    response.data.data.asset_id,
    BigInt(response.data.data.verifyTimestamp),
    response.data.data.signature
    );
  6. check transaction status

    if (res.status != 1) {
    throw new Error("pomp mint fail , res ", res);
    }