bgu*_*uiz 5 javascript solidity hedera-hashgraph
使用 Hedera SDK JS,我可以将帐户 ID 转换为“长零”格式的 EVM 地址。例如0.0.3996280-->0x00000000000000000000000000000000003cfa78
(参见相关问题:“如何将 Hedera 本机地址转换为 EVM 地址?”。)
如何转换为“非长零”格式 EVM 地址?例如0.0.3996280-->0x7394111093687e9710b7a7aeba3ba0f417c54474
(参见0.0.3996280Hashscan。)
我需要这个,因为当您ContractCallQuery通过 Hedera SDK 发送时,在调用的任何智能合约函数中可见的值msg.sender是“非长零”格式的 EVM 地址。
我目前在做什么:
const operatorId = AccountId.fromString(process.env.OPERATOR_ID);
const operatorEvmAddress = operatorId.toSolidityAddress();
Run Code Online (Sandbox Code Playgroud)
但是,operatorEvmAddress它采用“长零”格式,因此我无法在后续的智能合约交互中使用它。
小智 6
答案取决于您是否有权访问该帐户的公钥。\n请注意,如果您有私钥,则可以从中提取公钥。\n\xe2\x80\x8b\n如果您没有访问帐户的公钥:\n\xe2\x80\x8b\n您可以使用 SDK 获取长零 EVM 地址,\n这是一个数学转换。\n\xe2\x80\x8b\n但是,您无法单独使用 SDK 获取非长零 EVM 地址,\n这不是数学转换。\n您需要查询网络状态,\n例如通过 Hedera 镜像节点查询。\n\xe2 \x80\x8b\n如果您确实有权访问帐户的公钥:\n\xe2\x80\x8b\n您可以使用以下命令获取长零 EVM 地址和\n非长零 EVM 地址SDK。\n\xe2\x80\x8b
\nconst operatorId = AccountId.fromString(process.env.OPERATOR_ID);\nconst operatorPrivateKey = PrivateKey.fromString(process.env.OPERATOR_KEY);\nconst operatorPublicKey = operatorPrivateKey.publicKey;\n\xe2\x80\x8b\n// AccountId.toSolidityAddress --> long-zero\nconst operatorEvmAddressLongZero = operatorId.toSolidityAddress();\n\xe2\x80\x8b\n// PublicKey.toEvmAddress --> non-long-zero\nconst operatorEvmAddressNonLongZero = operatorPublicKey.toEvmAddress();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |