The zkbring-sdk
allows you to create and manage privacy-preserving ZK-powered token drops using Transgate and zkPass verification.
Install the SDK using Yarn:
yarn add zkbring-sdk
import TransgateConnect from "@zkpass/transgate-js-sdk"
import {
BringSDK
} from 'zkbring-sdk'
const sdk = await BringSDK.initialize({
walletOrProvider: signer, // optional, required for claiming a drop
transgateModule // optional, for zkPass functionality, required for claiming a drop
})
To retrieve an existing drop by its ID and user address:
const drop = await sdk.getDrop(
<DROP_ID>,
'0x...' // address of connected user if available. Can be useful to retrieve data for SSR
)
const isTransgateAvailable = await drop.isTransgateAvailable();
if (isTransgateAvailable) {
const result = await drop.generateWebproof();
const { webproof, ephemeralKey } = result;
}
drop.updateWalletOrProvider(signer)
const isClaimed = await drop.hasUserClaimed({ uHash: webproof.uHash })
if (!isClaimed) {
const { txHash, waitForClaim } = await drop.claim({ webproof, ephemeralKey })
console.log("Claimed at:", txHash)
await waitForClaim()
}
If walletOrProvider
was provided during SDK init or if signer was passed to drop via updateWalletOrProvider method:
const isClaimed = drop.hasConnectedUserClaimed; // boolean | undefined
if (isClaimed) {
const txHash = drop.connectedUserClaimTxHash; // string | undefined
}
import {
BringSDK,
Drop
} from 'zkbring-sdk'
const sdk = await BringSDK.initialize({ walletOrProvider: signer, transgateModule })
const drop = await sdk.getDrop(dropId, '0x...')
if (await drop.isTransgateAvailable()) {
const { webproof, ephemeralKey } = await drop.generateWebproof()
// not needed if signer was passed initially to SDK instance
drop.updateWalletOrProvider(signer)
const hasClaimed = await drop.hasUserClaimed({ uHash: webproof.uHash })
if (!hasClaimed) {
const { txHash, waitForClaim } = await drop.claim({ webproof, ephemeralKey })
console.log("Drop claimed in tx:", txHash)
await waitForClaim()
}
}