使用Hedera SDK JS,我可以将Account ID转换为“long-zero”格式的EVM地址。例如0.0.3996280
--> 0x00000000000000000000000000000000003cfa78
(See相关问题:"How to convert a Hedera native address into an EVM address?" .)
如何转换为“非长零”格式的EVM地址?例如0.0.3996280
--> 0x7394111093687e9710b7a7aeba3ba0f417c54474
(See 0.0.3996280
on Hashscan .)
我需要这个,因为当您通过Hedera SDK发送ContractCallQuery
时,在调用的任何智能合约函数中可见的msg.sender
的值是“非长零”格式的EVM地址。
我目前正在做的事情:
const operatorId = AccountId.fromString(process.env.OPERATOR_ID);
const operatorEvmAddress = operatorId.toSolidityAddress();
字符串
然而,operatorEvmAddress
是“长零”格式,因此我不能在后续的智能合约交互中使用它。
2条答案
按热度按时间t9aqgxwy1#
答案取决于您是否可以访问帐户的公钥。请注意,如果您有私钥,则可以从中提取公钥。如果您 * 没有 * 访问账户公钥的权限:您可以使用SDK获取长零EVM地址,因为这是一个数学转换。但是,您无法单独使用SDK获得非长零EVM地址,因为这不是数学转换。您需要查询网络状态,例如通过Hedera镜像节点查询。如果您 * 有 * 访问账户公钥的权限:您可以通过SDK获取长零EVM地址 * 和非长零EVM地址 *。
字符串
osh3o9ms2#
正如在Ashe's answer中提到的,并在大卫的评论中要求:
如果您无法访问帐户的公钥...您需要查询网络状态,例如通过Hedera镜像节点查询。
这里有一种方法,通过镜像节点:
字符串
这将输出:
型
其实际上是对应于该帐户的非长零EVM地址。
参考:上述API的镜像节点Swagger:https://testnet.mirrornode.hedera.com/api/v1/docs/#/accounts/getAccountByIdOrAliasOrEvmAddress