是否可以在 Hedera 上创建同时拥有 Ed25519 密钥和 ECDSA 密钥的帐户?

Rya*_*ndt 6 hedera-hashgraph

访问Hedera 门户时,\nit 为我生成 2 组密钥:\nan ED25519密钥和ECDSA密钥。

\n

然而,这些对应于不同的帐户。

\n

\xe2\x80\x8b\n我希望能够操作单个帐户\n该帐户可以由 ED25519ECDSA 密钥签名。

\n

这可能吗?如果是这样怎么办?

\n

bgu*_*uiz 7

同一帐户不能拥有 2 组密钥,这对底层加密不起作用。虽然 EdDSA 和 ECDSA 都使用椭圆曲线加密技术,但它们具有不同的底层算法,并且它们的椭圆曲线使用不同的配置(Ed25519 和 secp256k1),因此它在该级别上不起作用。

然而,尽管如此,您仍然可以实现您的目标,即能够“操作可由 ED25519ECDSA 密钥签名的单个帐户”。这在 Hedera 上是可能实现的,因为网络在协议级别支持 m-of-n 多重签名,因为 anAccountKey.

请注意,这与其他 EVM 兼容网络不同,在其他 EOA(外部拥有账户)网络中,EOA(外部拥有账户)只能只有一个密钥,这意味着多重签名功能需要使用智能合约进行自定义编程。

以下是使用 Hedera JavaScript SDK 实现此目的的方法:

(1) 创建一个 1-of-2 多重签名KeyList,由一个 Ed25519 密钥和一个 ECDSA secp256k1 密钥组成。

    const edKey = PrivateKey.generateED25519();
    const ecKey = PrivateKey.generateECDSA();
    const multisigPublicKeys = [edKey.publicKey, ecKey.publicKey];
    const multisigKeyList = new KeyList(multisigPublicKeys, 1);
Run Code Online (Sandbox Code Playgroud)

(2) 接下来multisigAccountId使用上面的edKeyecKey进行创建,并用一些 HBAR 为其提供资金。

(3) 更新multisigAccountId使用AccountUpdateTransaction ,将其密钥从创建帐户期间使用的单个密钥更改为上面创建的 1-of2 多重签名KeyList实例。

    const makeMultisigTx = new AccountUpdateTransaction()
        .setAccountId(multisigAccountId)
        .setKey(multisigKeyList)
        .freezeWith(client);
    const makeMultisigTxSignedByOneKey = await makeMultisigTx.sign(edKey);
    const makeMultisigTxSignedByAllKeys = await makeMultisigTxSignedByOneKey.sign(ecKey);
    const makeMultisigTxSubmitted = await makeMultisigTxSignedByAllKeys.execute(client);
Run Code Online (Sandbox Code Playgroud)

请注意,这需要由(和)AccountUpdateTransaction中的两个密钥进行签名。KeyListedKeyecKey

(4) 现在multisigAccountId可以使用以下方式进行签名:

  • 要么 edKey是 Ed25519 密钥
  • ecKey,这是 ECDSA 密钥

参考文献