This repo houses the Tokenbound SDK, a front-end library for interacting with ERC-6551 accounts on Starknet. The SDK provides an interface for interacting with tokenbound accounts, enabling operations like account creation, transaction execution, token transfers (including ERC-721, ERC-1155, and ERC-20 tokens), and message signing. Any onchain action you can perform with your EOA wallet can be done with your NFT's Tokenbound account.
Packages
src
- SDK client for all projects, signing enabled via Starknet.js.
examples/sdk-starknetjs
- An example app using the tokenbound SDK in a react project with starknetjsexamples/sdk-starknetjs-starknetkit-starknet-react
- An example app using the tokenbound SDK in a react project with starknetjs, starknetkit and starknet-react
Development Clone repository and install dependencies:
git clone <repo>
npm install
npm run build
NOTE: Any local changes to SDK methods in TokenboundClient.ts
require a rebuild to be useable in the example apps in /example
The TokenboundClient class provides an interface for interacting with tokenbound accounts, enabling operations like account creation, transaction execution, token transfers (including ERC-721, ERC-1155, and ERC-20 tokens), and message signing.
The client is instantiated with an object containing two parameters:
One of account <AccountInterface>
or walletClient <WalletClient>
is mandatory.
To configure tokenbound using walletClient:
import { TokenboundClient, WalletClient } from 'starknet-tokenbound-sdk';
const walletClient: WalletClient = {
address: "0x0617D13Db952a2965580ebAc9DF602debFa12d0eAFB7c1a79D9dA03321169286",
privateKey: process.env.REACT_APP_PRIVATE_KEY!,
}
const options = {
walletClient: walletClient,
registryAddress: registryAddress,
implementationAddress: implementationAddress,
jsonRPC: `https://starknet-mainnet.g.alchemy.com/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`
}
const tokenbound = new TokenboundClient(options)
Refer to the starknet-react documentation, for notes on configuring your StarknetProvider.
import { useAccount, useConnect } from '@starknet-react/core';
const options = {
account: account,
registryAddress: registryAddress,
implementationAddress: implementationAddress,
jsonRPC: `https://starknet-mainnet.g.alchemy.com/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`
}
const tokenbound = new TokenboundClient(options)
For easy reference, we've prepared code examples for a few simple SDK interactions.
The TokenboundClient
enables creation of and interaction with Tokenbound accounts:
Creates a tokenbound account for an NFT. createAccount adds the account to the registry and initializes it for use. Prior to account creation, the address can already receive assets. Deploying the account allows the NFT's owner to interact with the account.
const deployAccount = async () => {
try {
await tokenbound.createAccount({
tokenContract: tokenContract,
tokenId: tokenId,
salt: "3000000000"
})
}
catch (error) {
console.log(error)
}
}
Parameter Description Type
- tokenContract: The address of the token contract.
string
- tokenId: The token ID.
string
- salt: The salt used to create a unique account address (optional)
number
Gets the tokenbound account address for an NFT.
Returns the tokenbound account address for a given token contract and token ID.
const getAccount = async () => {
const account = await tokenbound.getAccount({
tokenContract: tokenContract,
tokenId: tokenId,
salt: "3000000000"
})
}
Parameter Description Type
- tokenContract: The address of the token contract. string
- tokenId: The token ID. string
- salt: The salt used when the account was created (optional) number
Check if the tokenbound account address has been activated using createAccount.
Returns a boolean and classHash indicating if a tokenbound account has been deployed (created) at the accountAddress
const getDeploymentStatus = async () => {
const status = await tokenbound.checkAccountDeployment({
tokenContract,
tokenId,
salt: "3000000000"
})
setDeployStatus(status?.deployed)
setAccountClassHash(status?.classHash)
}
Parameter Description Type
- tokenContract: The token contract address
- tokenId: The token ID
- salt