访问Hedera 门户时,\nit 为我生成 2 组密钥:\nan ED25519密钥和ECDSA密钥。
\n然而,这些对应于不同的帐户。
\n\xe2\x80\x8b\n我希望能够操作单个帐户\n该帐户可以由 ED25519或ECDSA 密钥签名。
\n这可能吗?如果是这样怎么办?
\n同一帐户不能拥有 2 组密钥,这对底层加密不起作用。虽然 EdDSA 和 ECDSA 都使用椭圆曲线加密技术,但它们具有不同的底层算法,并且它们的椭圆曲线使用不同的配置(Ed25519 和 secp256k1),因此它在该级别上不起作用。
然而,尽管如此,您仍然可以实现您的目标,即能够“操作可由 ED25519或ECDSA 密钥签名的单个帐户”。这在 Hedera 上是可能实现的,因为网络在协议级别支持 m-of-n 多重签名,因为 anAccount与Key.
请注意,这与其他 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使用上面的edKey或ecKey进行创建,并用一些 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 密钥参考文献
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |