SINAI STANDARD

MaxBalanceManager

Manage the Max Balance Transfer Hook — per-wallet balance cap enforcement for Token-2022 tokens

Import

import { MaxBalanceManager } from "@sinai-standard/sdk";
const mgr = new MaxBalanceManager(anchorProgram, mintPubkey);

Properties

PropertyTypeDescription
configPDAPublicKeyThe MaxBalanceConfig PDA address
extraAccountMetasPDAPublicKeyThe ExtraAccountMetas PDA address

Methods

initialize(authority, maxBalance)

Creates the MaxBalanceConfig PDA for the mint.

ParameterTypeDescription
authorityPublicKeyAdmin who can manage the max balance config
maxBalancenumber | BNMaximum allowed token balance per wallet
await mgr.initialize(issuer.publicKey, 1_000_000 * 10 ** 6); // 1M tokens

initializeExtraAccountMetas(payer)

Creates the ExtraAccountMetaList PDA.

Must be called before any transfer.

await mgr.initializeExtraAccountMetas(issuer.publicKey);

updateMaxBalance(authority, newMaxBalance)

Changes the maximum balance limit. Takes effect immediately for all future transfers.

ParameterTypeDescription
authorityPublicKeyMaxBalanceConfig authority
newMaxBalancenumber | BNNew maximum balance per wallet
await mgr.updateMaxBalance(issuer.publicKey, 2_000_000 * 10 ** 6); // Raise to 2M

toggleActive(authority, isActive)

Kill switch. When isActive=false, max balance checks are not enforced.

await mgr.toggleActive(issuer.publicKey, false); // Disable enforcement
await mgr.toggleActive(issuer.publicKey, true);  // Re-enable

updateAuthority(authority, newAuthority)

Transfers admin rights.

await mgr.updateAuthority(issuer.publicKey, newAdmin.publicKey);

fetchConfig()

Fetches the current on-chain max balance config.

const config = await mgr.fetchConfig();
 
interface MaxBalanceConfigData {
  authority: PublicKey;
  mint: PublicKey;
  maxBalance: bigint;
  isActive: boolean;
}

On this page