You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Get balances for multiple addresses at onceconstaddresses=['GABC...ADDR1','GDEF...ADDR2','GHIJ...ADDR3',];constbalances=awaitclient.getBalances(addresses);balances.forEach((balance,index)=>{console.log(`${addresses[index]}: ${balance}`);});// Custom batch sizeconstbalances=awaitclient.getBalances(addresses,5);// Process 5 at a time
Querying Events
// Get recent events (last 1000 ledgers by default)constevents=awaitclient.getEvents();events.forEach(event=>{console.log('Event:',event);});// Get events from a specific starting ledgerconstevents=awaitclient.getEvents(12345);
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Mint to multiple recipients in one transactionconstrecipients=[['GABC...RECIPIENT1',BigInt(1000_0000000)],// 1000 tokens['GDEF...RECIPIENT2',BigInt(500_0000000)],// 500 tokens['GHIJ...RECIPIENT3',BigInt(250_0000000)],// 250 tokens];constresult=awaitclient.batchMint(recipients,adminKeypair);console.log('Batch mint TX:',result.hash,'Success:',result.success);
Offline Transaction Building
constadminPublicKey='GABC...ADMIN';// Build unsigned mint transactionconstunsignedMintTx=awaitclient.buildMintTx('GDEF...RECIPIENT',BigInt(1000_0000000),adminPublicKey);// Build unsigned transfer transactionconstunsignedTransferTx=awaitclient.buildTransferTx('GABC...SENDER','GDEF...RECIPIENT',BigInt(100_0000000),adminPublicKey);// Build unsigned approve transactionconstunsignedApproveTx=awaitclient.buildApproveTx('GABC...OWNER','GDEF...SPENDER',BigInt(500_0000000),0,// Expiration ledger (0 = no expiration)adminPublicKey);// Build unsigned burn transactionconstunsignedBurnTx=awaitclient.buildBurnTx('GABC...OWNER',BigInt(50_0000000),adminPublicKey);
Signing Offline Transactions
constkeypair=Keypair.fromSecret('SXXX...SECRET');// Sign an unsigned transaction XDRconstsignedTx=client.signTx(unsignedMintTx,keypair);console.log('Signed transaction:',signedTx);
Simulating Transactions
constadminPublicKey='GABC...ADMIN';// Simulate a generic contract methodconstsimResult=awaitclient.simulate('mint',[addressToScVal('GDEF...RECIPIENT'),i128ToScVal(BigInt(1000_0000000))],adminPublicKey);console.log('Simulation result:',simResult);// Simulate mint operationconstmintSim=awaitclient.simulateMint('GDEF...RECIPIENT',BigInt(1000_0000000),adminPublicKey);console.log('Mint simulation:',mintSim);// Simulate transfer operationconsttransferSim=awaitclient.simulateTransfer('GABC...SENDER','GDEF...RECIPIENT',BigInt(100_0000000),adminPublicKey);console.log('Transfer simulation:',transferSim);
Multi-Signature Admin Pool
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Configure multi-sig admin poolconstadminPool=['GADMIN1...ADDR','GADMIN2...ADDR','GADMIN3...ADDR',];constthreshold=2;// Require 2 of 3 signaturesawaitclient.setAdminPool(adminPool,threshold,adminKeypair);console.log('Admin pool configured');
Upgrading the Contract
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Upgrade to new WASM hashconstnewWasmHash='a1b2c3d4e5f6...';// 32-byte hex stringawaitclient.upgrade(newWasmHash,adminKeypair);console.log('Contract upgraded');
Multi-Sig Proposals
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Propose a mint actionconstmintResult=awaitclient.proposeAction(adminKeypair.publicKey(),{Mint: ['GDEF...RECIPIENT',BigInt(1000_0000000)]},'Mint 1000 tokens to recipient',adminKeypair);console.log('Mint proposal created:',mintResult.hash);// Propose a pause actionconstpauseResult=awaitclient.proposeAction(adminKeypair.publicKey(),{Pause: []},'Pause contract for maintenance',adminKeypair);console.log('Pause proposal created:',pauseResult.hash);// Approve a proposal (by another admin)constadmin2Keypair=Keypair.fromSecret('SXXX...SECRET2');awaitclient.approveProposal(admin2Keypair.publicKey(),BigInt(1),// Proposal IDadmin2Keypair);// Execute a proposal once quorum is reachedawaitclient.executeProposal(BigInt(1),adminKeypair);console.log('Proposal executed');
Regulatory Operations
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Set clawback administratorawaitclient.setClawbackAdmin('GCLAWBACK...ADMIN',adminKeypair);console.log('Clawback admin set');// Execute clawback (from clawback admin)constclawbackKeypair=Keypair.fromSecret('SXXX...CLAWBACK');awaitclient.clawback('GABC...FROM','GDEF...TO',BigInt(100_0000000),clawbackKeypair);console.log('Clawback executed');// Update token nameawaitclient.updateName('New Token Name',adminKeypair);console.log('Token name updated');// Update token symbolawaitclient.updateSymbol('NEW',adminKeypair);console.log('Token symbol updated');
Token Locking and Vesting
constadminKeypair=Keypair.fromSecret('SXXX...SECRET');// Lock tokens for a user (unlock timestamp in seconds)constunlockTime=BigInt(Math.floor(Date.now()/1000)+86400);// 24 hours from nowawaitclient.lockTokens('GABC...USER',BigInt(1000_0000000),unlockTime,adminKeypair);console.log('Tokens locked');// Withdraw matured locked tokensconstuserKeypair=Keypair.fromSecret('SXXX...USER');awaitclient.withdrawLocked(userKeypair.publicKey(),userKeypair);console.log('Locked tokens withdrawn');
Admin Operations
// Transfer ownershipawaitclient.transferOwnership('GNEWADMIN...ADDR',adminKeypair);// Emergency pause / unpauseawaitclient.pause(adminKeypair);awaitclient.unpause(adminKeypair);
API Reference
Read-Only Methods
Method
Returns
Description
getBalance(address)
bigint
Token balance for an address
getTotalSupply()
bigint
Total circulating supply
getName()
string
Token name
getSymbol()
string
Token symbol
getDecimals()
number
Decimal places
getAllowance(owner, spender)
bigint
Spending allowance
getVersion()
string
Contract version
getBalances(addresses[], batchSize)
bigint[]
Batch query multiple balances
getEvents(startLedger?)
any[]
Get contract events
Write Methods (require Keypair)
Method
Description
initialize(admin, decimals, name, symbol, source)
One-time contract setup
mint(to, amount, source)
Mint tokens (admin-only)
batchMint(recipients[], source)
Batch mint to multiple addresses (admin-only)
transfer(from, to, amount, source)
Transfer tokens
approve(from, spender, amount, source)
Set spending allowance
burn(from, amount, source)
Burn tokens
transferOwnership(newAdmin, source)
Transfer admin role
pause(source)
Pause contract (admin-only)
unpause(source)
Unpause contract (admin-only)
setAdminPool(pool[], threshold, source)
Configure multi-sig admin pool
upgrade(newWasmHash, source)
Upgrade contract WASM (admin-only)
proposeAction(admin, action, description, source)
Propose multi-sig action
approveProposal(admin, proposalId, source)
Approve a proposal
executeProposal(proposalId, source)
Execute approved proposal
setClawbackAdmin(admin, source)
Set clawback administrator
clawback(from, to, amount, source)
Execute clawback
updateName(newName, source)
Update token name (admin-only)
updateSymbol(newSymbol, source)
Update token symbol (admin-only)
lockTokens(user, amount, unlockTime, source)
Lock tokens for vesting
withdrawLocked(user, source)
Withdraw matured locked tokens
Offline Transaction Builders
Method
Returns
Description
buildMintTx(to, amount, sourcePublicKey)
string
Build unsigned mint transaction XDR
buildTransferTx(from, to, amount, sourcePublicKey)