我正在探索 Hedera Hashgraph,旨在检索链接到网络内特定公钥的所有关联帐户 ID。
有人可以指导我提取与 Hedera Hashgraph 中给定公钥关联的所有相关帐户 ID 所需的最佳方法或相关 API 调用和流程吗?任何代码示例或详细步骤将不胜感激。
我研究了各种方法和 API 功能,但尚未找到完成此任务的明确方法。
访问Hedera 门户时,\nit 为我生成 2 组密钥:\nan ED25519密钥和ECDSA密钥。
\n然而,这些对应于不同的帐户。
\n\xe2\x80\x8b\n我希望能够操作单个帐户\n该帐户可以由 ED25519或ECDSA 密钥签名。
\n这可能吗?如果是这样怎么办?
\n在接收 HTS 令牌之前,我需要首先与令牌 ID 关联。\n如果我使用 JS SDK,我知道要执行以下操作,其中这是accountId我想要与令牌关联的帐户。
const associateTransaction = await new TokenAssociateTransaction()\n .setAccountId(accountId)\n .setTokenIds([tokenId])\n .freezeWith(client);\nRun Code Online (Sandbox Code Playgroud)\n但是,如何使用 EVM 交易关联/分离 HTS 代币?
\nI\xe2\x80\x99ve 尝试在我的智能合约中执行以下操作
\nfunction mintNft(\n address token,\n bytes[] memory metadata\n ) public payable returns(int64){\n\n (int response, , int64[] memory serial) = HederaTokenService.mintToken(token, 0, metadata);\n if(response != HederaResponseCodes.SUCCESS){\n revert("Failed to mint non-fungible token");\n }\n\n int res = HederaTokenService.associateToken(\n address(msg.sender),\n token\n );\n\n if(res != HederaResponseCodes.SUCCESS){\n revert("Failed to associate non-fungible token");\n }\n \n return serial[0];\n }\nRun Code Online (Sandbox Code Playgroud)\n … 当我同时将 2 个智能合约部署到 Hedera Testnet 时,出现以下错误:
nonce has already been used [ See: https://links.ethers.org/v5-errors-NONCE_EXPIRED ]
Run Code Online (Sandbox Code Playgroud)
这种情况间歇性地发生,大约有 20% 的时间发生。它们的发生似乎是不确定的,尽管我无法证实这一点。
我的部署代码是:
const deploymentSigner: Signer = (await hre.ethers.getSigners())[0];
// console.log('Deployment signer address', (await deploymentSigner.getAddress()));
const scDeploymentPromises: Promise<Contract>[] = [];
for (let idx = 0; idx < scNamesToDeploy.length; ++idx) {
const scName = scNamesToDeploy[idx];
const scFactory: ContractFactory =
await hre.ethers.getContractFactory(scName);
console.log(`Deploying ${scName} on ${networkName} ...`);
const sc: Contract = await scFactory.deploy();
// NOTE deployment with constructor params not needed for these particular SCs
const …Run Code Online (Sandbox Code Playgroud) 使用 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它采用“长零”格式,因此我无法在后续的智能合约交互中使用它。
我想知道如何将帐户 ID 别名(十六进制)转换为帐户 ID 别名(仅限字符)。比如从格式0.0.302a300506032b657003210030a028ee7fd716c438de818a8831ed2235d0f85e430ab036dbfac173eb50aef9到格式0.0.HIQQEXWKW53RKN4W6XXC4Q232SYNZ3SZANVZZSUME5B5PRGXL663UAQA.Hedera SDK中有没有函数可以完成这个功能?
我正在按照以下说明进行操作hedera-json-rpc-relay:具体来说docs/configuration.md,尝试运行连接到 Hedera Testnet 的 RPC 中继:
HEDERA_NETWORK=TESTNET
OPERATOR_ID_MAIN=0.0.3996280
OPERATOR_KEY_MAIN=<redacted>
OPERATOR_ID_ETH_SENDRAWTRANSACTION=
OPERATOR_KEY_ETH_SENDRAWTRANSACTION=
CHAIN_ID=0x128
MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com/
E2E_RELAY_HOST=
Run Code Online (Sandbox Code Playgroud)
请注意,OPERATOR_ID_MAIN和OPERATOR_KEY_MAIN已为门户获得,并已成功用于其他交易。
具体指令HEDERA_NETWORK是:
连接到哪个网络。自动填充主节点和镜像节点端点。可以是 MAINNET、PREVIEWNET、TESTNET 或网络 IP 映射 -> 节点 accountId,例如 {"127.0.0.1:50211":"0.0.3"}
但是,当我运行时npm run start,我收到以下错误Error: unknown network: TESTNET
...即使根据文档,这明确是允许的值。
(完整输出复制在下面<hr/>)。
启动 RPC 中继并将其连接到 Hedera 测试网的正确配置是什么?
> start
> npx lerna exec --scope @hashgraph/json-rpc-server -- npm run start
lerna notice cli v6.4.1
lerna info versioning independent
lerna notice filter including "@hashgraph/json-rpc-server"
lerna info …Run Code Online (Sandbox Code Playgroud) 我无法通过 HTTP 连接到 Hedera Testnet RPC 端点,\n确实,我间歇性地收到以下“未知错误”:\n\xe2\x80\x8b
\n[Request ID: fe7b9928-a23f-0d72-61a1-b7cd23658c01] Unknown error invoking RPC\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n我正在使用以下 RPC 端点进行连接:\n\xe2\x80\x8b
\nhttps://testnet.hashio.io/api\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n是否有替代(更可靠)的方法来连接到 Hedera 测试网?\n\xe2\x80\x8b
\n\xe2\x80\x8b\n我想使用 web3.js 或 ethers.js 与 Hedera 测试网进行交互。我该如何执行此操作?\n\xe2\x80\x8b\n我之前曾使用 与 Hedera Testnet 进行过交互hedera-sdk-js,\n例如使用以下代码:\n\xe2\x80\x8b
import {\n AccountBalanceQuery, \n Client\n} from "@hashgraph/sdk";\n\xe2\x80\x8b\nconst client = new Client({\n network: "testnet"\n});\n\xe2\x80\x8b\nconst accountId = \'0.0.3996280\';\nconst balance = await new AccountBalanceQuery()\n .setAccountId(accountId)\n .execute(client);\n \nconsole.log(\n `Balance of ${accountId} in Tinybars:`,\n balance.hbars.toTinybars().toString(10)\n);\n\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n如何在 web3.js/ ethers.js 中执行与上述相同的操作?
\n我知道这eth_estimateGas并不准确,\n但目前,我得到的实际gasUsed值\n大约是 \xc2\xa0 返回值的 6% eth_estimateGas。
在以下示例中,\n我使用完全相同的输入调用相同的智能合约两次,只有 1 个差异:
\ngasLimit = eth_estimateGasgasLimit = eth_estimateGas * 0.064\n // with exact estimated amount of gas\n const estimatedGas2 = (await expendGasSc.estimateGas.updateState(1_000_000_123n)).toBigInt();\n console.log(\'estimatedGas2\', estimatedGas2);\n const gasLimit2 = estimatedGas2 * 1n;\n console.log(\'gasLimit2\', gasLimit2);\n const txResponse2 = await (await expendGasSc\n .updateState(\n 1_000_000_123n,\n { gasLimit: gasLimit2 },\n ))\n .wait();\n const gasUsed2 = txResponse2.gasUsed.toBigInt();\n console.log(\'gasUsed2\', gasUsed2);\n\n // with …Run Code Online (Sandbox Code Playgroud) hedera-hashgraph ×10
hedera ×5
javascript ×4
solidity ×3
ethers.js ×2
rpc ×2
hardhat ×1
json-rpc ×1
public-key ×1
sdk ×1
web3js ×1