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

如何查询Hedera中TransferTransaction创建的懒加载账户对应有序账户ID?

如何获取Hedera懒加载创建的EVM地址对应账户ID并保证映射顺序?

已完成以下步骤:

  1. 本地生成多个无Hedera对应账户的EVM地址(evmAddress*)
  2. 通过TransferTransaction从已有账户(operatorId)向这些EVM地址转账,代码示例:
const tinyBarsPerHbar = 100_000_000;
const multiTransferTx = new TransferTransaction()
        .addHbarTransfer(operatorId, -30 * tinyBarsPerHbar)
        .addHbarTransfer(evmAddress1, 10 * tinyBarsPerHbar)
        .addHbarTransfer(evmAddress2, 10 * tinyBarsPerHbar)
        .addHbarTransfer(evmAddress3, 10 * tinyBarsPerHbar)
        .freezeWith(client)
        .sign(operatorKey);
const transferTxResponse = await multiTransferTx.execute(client);
  1. 转账交易执行后,这些EVM地址在Hedera中被懒加载创建关联账户

现需实现步骤4:生成EVM地址与对应账户ID的映射,且保证映射顺序与转账时的EVM地址顺序完全一致。


可靠实现方案

核心思路是利用转账交易的完整交易记录,结合预先保存的转账EVM地址顺序,逐个匹配生成映射,确保顺序完全对应。

代码实现

// 1. 获取交易收据(确保交易已确认),再获取完整交易记录
const transferTxReceipt = await transferTxResponse.getReceipt(client);
const transferTxRecord = await transferTxResponse.getRecord(client);

// 2. 提前保存转账时使用的EVM地址列表,顺序必须和addHbarTransfer时完全一致
const targetEvmAddresses = [evmAddress1, evmAddress2, evmAddress3];

// 3. 生成顺序正确的映射对象
const evmToAccountIdMap = {};

targetEvmAddresses.forEach(evmAddr => {
  // 在交易记录的转账列表中匹配对应EVM地址的账户
  const transferEntry = transferTxRecord.transferList.find(entry => {
    // 统一转小写避免大小写匹配问题
    return entry.accountId.toEvmAddress() === evmAddr.toLowerCase();
  });

  if (transferEntry) {
    // 若需要AccountId对象而非字符串,直接存transferEntry.accountId即可
    evmToAccountIdMap[evmAddr] = transferEntry.accountId.toString();
  }
});

// 最终输出符合要求的映射
console.log(evmToAccountIdMap);

方案说明

  • 交易记录(transferTxRecord)包含了所有转账对象的详细信息,其中每个transferEntry的accountId就是懒加载生成的账户ID
  • 通过预先保存的targetEvmAddresses遍历,严格按照转账时的顺序匹配,彻底避免顺序混乱问题
  • 利用accountId.toEvmAddress()转换后对比,确保EVM地址与账户ID的对应关系准确无误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:40