Cardano (ada) 的私钥和签名密钥是什么?

问题描述

我正在尝试使用 nodejs 和 @emurgo/cardano-serialization-lib-nodejs lib (CardaNowasm) 生成地址并创建交易。 按照我正在尝试的文档:

const rootkey = CardaNowasm.Bip32PrivateKey.from_bip39_entropy(
  Buffer.from(someEntropy,'hex'),// entropy is generated from mnemonic
  Buffer.from('')
);

const account = rootkey
  .derive(harden(1852)) // harden is a function returning 0x80000000+arg
  .derive(harden(1815))
  .derive(harden(0));

const utxokey = account
  .derive(0)
  .derive(0)
  .to_public();

const stake1 = account
  .derive(2)
  .derive(0)
  .to_public();

const address = CardaNowasm.BaseAddress.new(
   CardaNowasm.NetworkInfo.mainnet().network_id(),CardaNowasm.StakeCredential.from_keyhash(utxokey.to_raw_key().hash()),CardaNowasm.StakeCredential.from_keyhash(stakekey.to_raw_key().hash())
);

const addressBech32 = address.to_address().to_bech32();

因此,在我的示例中,addressBech32 是钱包的实际公共地址。当我通过助记符将钱包导入到guarda(例如)时,它工作正常。 但究竟什么是 rootkey 和 account?在我的示例中,私钥和签名密钥是什么?我应该使用什么密钥来签署交易以及如何使用 Cardano wasm 获取该密钥?我应该使用什么私钥来导入钱包(如果我出于某种原因不想使用助记符)?

解决方法

当我通过助记符将钱包导入到guarda(例如)时,它工作正常。但实际上 rootkey 和帐户是什么?

rootKey 代表您的 xpriv,即您的主私钥,所有质押和支出、私钥和公钥均从中生成。

CIP-0003 中描述了生成抵押和签名密钥的过程,基本上搭载了比特币 BIP32 和 BIP44 standard

简而言之,该方案允许使用主密钥生成多个单独的钱包“帐户”。在您的示例中:

const account = rootkey
  .derive(harden(1852)) // harden is a function returning 0x80000000+arg
  .derive(harden(1815))
  .derive(harden(0));

为卡尔达诺账户零生成私钥。

更进一步:

account
  .derive(0)     # external chain (designated for receive addresses)
  .derive(0);    # index (the first address)

将为该帐户中的接收地址零生成一个私钥。

在我的示例中,私钥和签名密钥是什么?我应该使用什么密钥来签署交易以及如何使用 Cardano wasm 获取该密钥?

您的示例为(Cardano 帐户 0)接收地址 0 创建了一个 bech32 地址。 所以从这个地址花费的私钥和上面的一样:

const utxo_privkey = account
  .derive(0)
  .derive(0); 

我应该使用什么私钥来导入钱包(如果我出于某种原因不想使用助记符)?

您可以将熵作为字节提供,就像您在 rootKey 的示例中所做的那样,或者您可以像这样使用 bech32 编码的私钥:

const rootKey = CardanoWasm.BIP32PrivateKey.from_bech32("xprv17qx9vxm6060qjn5fgazfue9nwyf448w7upk60c3epln82vumg9r9kxzsud9uv5rfscxp382j2aku254zj3qfx9fx39t6hjwtmwq85uunsd8x0st3j66lzf5yn30hwq5n75zeuplepx8vxc502txx09ygjgx06n0p");
,

可以看Cardano Shelley地址样式文档 https://input-output-hk.github.io/cardano-addresses/haddock/cardano-addresses-3.2.0/Cardano-Address-Style-Shelley.html#g:2

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...