如何在React应用中获取Temple Wallet的所有资产/代币余额?
获取Temple Wallet内所有资产/代币余额的实现方案
一、直接通过Temple Wallet DApp SDK获取全量资产
Temple Wallet的官方DApp SDK提供了直接获取用户钱包内所有资产(包括XTZ和自定义代币)的方法,无需手动处理合约交互,是最便捷的方式:
import { useTempleClient, useAccount } from '@temple-wallet/dapp'; const AssetList = () => { const { client } = useTempleClient(); const { account } = useAccount(); const loadAllAssets = async () => { if (!client || !account) return; // 获取用户钱包内已添加的所有资产 const assets = await client.getAssets(account.publicKeyHash); // 遍历处理资产数据,转换为可读格式 const formattedAssets = assets.map(asset => ({ name: asset.name, symbol: asset.symbol, balance: (asset.balance.toNumber() / (10 ** asset.decimals)).toFixed(2), contractAddress: asset.contract?.address // XTZ的contract字段为undefined })); console.log('用户资产列表:', formattedAssets); // 后续可将formattedAssets渲染到UI组件中 }; return ( <div> <button onClick={loadAllAssets}>加载所有资产余额</button> {/* 这里添加UI渲染逻辑 */} </div> ); };
说明
- 返回的
assets数组包含XTZ和用户已添加的所有代币,每个资产的balance为原始整数,需根据decimals字段转换为可读的小数格式 - 该方法自动同步Temple Wallet内的资产数据,无需手动维护合约地址列表
二、通过Taquito手动查询特定代币余额
如果需要查询未添加到Temple Wallet的代币,或自定义合约交互逻辑,可以使用Taquito调用代币合约的标准视图方法:
import { TezosToolkit } from '@taquito/taquito'; const tezos = new TezosToolkit("https://rpc.tzkt.io/ghostnet"); const getTokenBalance = async (walletAddress, tokenContractAddr) => { try { const tokenContract = await tezos.contract.at(tokenContractAddr); // 调用TZIP-12标准的getBalance视图方法(部分合约用balance_of) const balanceResult = await tokenContract.views.getBalance(walletAddress).read(); // 获取代币精度,转换为可读格式 const decimals = await tokenContract.storage.decimals(); const readableBalance = balanceResult.toNumber() / (10 ** decimals); return readableBalance; } catch (err) { console.error('查询代币余额失败:', err); return 0; } }; // 使用示例:替换为实际的钱包地址和LYZI合约地址 // const lyziBalance = await getTokenBalance('tz1YourWalletAddress', 'KT1LyziContractAddress');
注意事项
- 绝大多数Tezos代币遵循TZIP-12标准,统一使用
getBalance或balance_of方法查询余额 - 若遇到非标准合约,需参考对应代币的合约接口文档调整调用逻辑
三、批量查询优化
如果需要批量查询多个代币,可以结合上述两种方式:
- 先通过Temple SDK获取用户已有的资产列表
- 对需要补充的代币,用Taquito批量调用合约方法,减少RPC请求次数
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

