You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

py-algorand-sdk复现./sandbox goal account list及多余账户问题

问题1:如何通过py-algorand-sdk完全复现./sandbox goal account list的查询效果

首先明确核心差异:

  • ./sandbox goal account list 查的是本地节点KMD(密钥管理守护进程)钱包中托管的账户,不是链上所有账户
  • 你之前用indexer查询的是整个链上所有有余额、有过交易记录的账户,两者查询范围完全不同

复现步骤:使用KMD客户端获取本地钱包内的账户列表,再结合Algod客户端查询对应账户的状态、余额即可,示例代码如下:

from algosdk import kmd, algod

# 连接Algod客户端
algod_address = "http://localhost:4001"
algod_token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
algod_client = algod.AlgodClient(algod_token, algod_address)

# 连接KMD客户端(sandbox默认KMD端口为4002)
kmd_address = "http://localhost:4002"
kmd_token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
kmd_client = kmd.KMDClient(kmd_token, kmd_address)

# 获取sandbox默认未加密钱包的ID
default_wallet_name = "unencrypted-default-wallet"
wallets = kmd_client.list_wallets()
wallet_id = None
for w in wallets:
    if w["name"] == default_wallet_name:
        wallet_id = w["id"]
        break

# 打开钱包获取句柄,sandbox默认钱包无密码
wallet_handle = kmd_client.init_wallet_handle(wallet_id, "")
# 获取钱包内所有账户地址
account_addresses = kmd_client.list_keys(wallet_handle)

# 查询每个账户的状态、余额,和goal输出完全一致
for addr in account_addresses:
    account_info = algod_client.account_info(addr)
    status = "online" if account_info["status"] == "Online" else "offline"
    balance = account_info["amount"]
    print(f"[{status}] {addr} {balance} microAlgos")
问题2:SDK返回的额外未知账户是什么

你用indexer查询到的额外账户是Algorand链的内置系统账户,要么是费用归集账户(Fee Sink),要么是奖励池账户(Rewards Pool)。
这类账户属于链的基础配置,没有对应的私钥托管在你本地的KMD钱包中,所以默认不会出现在goal account list的返回结果里,但它们确实存在于链上,所以会被indexer检索到。

内容的提问来源于stack exchange,提问作者Uppers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 18:15:05