zkbring-sdk
TypeScript icon, indicating that this package has built-in type declarations

0.0.1-alpha-rc.24 • Public • Published

🧰 zkBring SDK

The zkbring-sdk allows you to create and manage privacy-preserving ZK-powered token drops using Transgate and zkPass verification.


Installation

Install the SDK using Yarn:

yarn add zkbring-sdk

🔧 Importing the SDK and TransgateConnect

import TransgateConnect from "@zkpass/transgate-js-sdk"
import {
  BringSDK
} from 'zkbring-sdk'

Getting Started

Initialize the SDK

const sdk = await BringSDK.initialize({
  walletOrProvider: signer, // optional, required for claiming a drop
  transgateModule // optional, for zkPass functionality, required for claiming a drop
})

Get Drop Instance

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
)

Verify User with zkPass (Before Claiming)

const isTransgateAvailable = await drop.isTransgateAvailable();

if (isTransgateAvailable) {
  const result = await drop.generateWebproof();
  const { webproof, ephemeralKey } = result;
}

Update Wallet or Provider (Before Claiming)

drop.updateWalletOrProvider(signer)

Claim the Drop

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()
}

Additional Claim Checks (Optional)

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
}

Full Example (Claim flow)

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()
  }
}

Dependents (0)

Package Sidebar

Install

npm i zkbring-sdk

Weekly Downloads

33

Version

0.0.1-alpha-rc.24

License

MIT

Unpacked Size

436 kB

Total Files

113

Last publish

Collaborators

  • bigmacxhaz