如何查询由 `TransferTransaction` 创建到 Hedera 上 EVM 地址的一组惰性创建帐户的(有序)帐户 ID?

问题描述 投票:0回答:1

我已完成以下步骤 1 到 3,并弄清楚如何完成步骤 4。

(1) 在本地生成几个EVM地址(

evmAddress*
),这些EVM地址在Hedera网络上还没有账户。

(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);

(3) 当

multiTransferTx
完成时,EVM 地址现在在 Hedera 网络上延迟创建帐户并与之关联

(4) 现在需要找出每个 EVM 地址映射到的帐户 ID,即生成如下内容:

{
  evmAddress1: accountId1,
  evmAddress2: accountId2,
  evmAddress3: accountId3,
}

第4步如何完成?


注意

我在下面进行了自我回答,但有一个警告,不幸的是,这使它成为一个不够好的解决方案。希望收到另一个不受此警告约束的答案,其中保证顺序/映射。

hedera-hashgraph
1个回答
0
投票

可以使用以下代码完成第 4 步,但需要注意如下所述

    // obtain `transferTxId` from `multiTransferTx`

    // convert transaction ID to a Mirror Node API URL
    const [idPart1, idPart2] = transferTxId.split('@');
    const transferTxIdMnFormat = `${idPart1}-${idPart2.replace('.', '-')}`;
    const transferTxMnResponse = await fetch(`https://testnet.mirrornode.hedera.com/api/v1/transactions/${transferTxIdMnFormat}?nonce=0`);
    const transferTxMnResult = await transferTxMnResponse.json();

    // parse 
    const transfers = transferTxMnResult.transactions[0].transfers;

这会产生与此类似的输出:

[
  { account: '0.0.5', amount: 4547, is_approval: false },
  { account: '0.0.98', amount: 96793, is_approval: false },
  { account: '0.0.800', amount: 10754, is_approval: false },
  { account: '0.0.1521', amount: -2000112094, is_approval: false },
  { account: '0.0.1529253', amount: 1000000000, is_approval: false },
  { account: '0.0.1529255', amount: 1000000000, is_approval: false },
  { account: '0.0.1530238', amount: 1000000000, is_approval: false }
]

随后,通过

amount === 1000000000
过滤此列表,得到我想要的帐户 ID。


警告

上述方法有效,但是,它没有说明哪些帐户 ID 映射到哪些 EVM 地址。 我们可以假设这些账户ID出现的顺序 与创建

addHbarTransfer
时调用
multiTransferTx
的顺序相同。 手动测试似乎证实了这一点 - 顺序确实匹配。 然而,这没有记录在案的行为,因此不能得到保证。 我们甚至不知道顺序是否是确定性的。

© www.soinside.com 2019 - 2024. All rights reserved.