首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是cardano (ada)的私钥和签名密钥?

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

Stack Overflow用户
提问于 2021-02-09 10:31:45
回答 3查看 1.6K关注 0票数 8

我试图使用nodejs和@emurgo/cardano-序列化- lib -nodejs (CardanoWasm)生成地址和创建事务。跟着医生我试着这样做:

代码语言:javascript
复制
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是钱包的实际公共地址。当我通过助记符将钱包导入瓜尔达(例如)时,它工作得很好。但真正的根和账户是什么?在我的示例中,私钥和签名密钥是什么?我应该使用什么密钥来签署交易,以及如何使用cardano wasm获得该密钥?我应该使用什么私钥进口钱包(如果我不想使用助记符的原因)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-16 13:36:21

当我通过助记符将钱包导入瓜尔达(例如)时,它工作得很好。但真正的根和账户是什么?

rootKey是您的xpriv (主私钥)的表示,所有的赌注和开销、私钥和公钥都是从它生成的。

生成赌注和签名密钥的过程用CIP-0003描述,基本上是从比特币的BIP32和BIP44标准中提取出来的。

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

代码语言:javascript
复制
const account = rootkey
  .derive(harden(1852)) // harden is a function returning 0x80000000+arg
  .derive(harden(1815))
  .derive(harden(0));

为Cardano帐户零生成私钥。

更进一步:

代码语言:javascript
复制
account
  .derive(0)     # external chain (designated for receive addresses)
  .derive(0);    # index (the first address)

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

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

您的示例为(Cardano帐户0)创建接收地址0的bech32地址。因此,从这个地址花费的私钥将与上面的相同:

代码语言:javascript
复制
const utxo_privkey = account
  .derive(0)
  .derive(0); 

我应该使用什么私钥进口钱包(如果我不想使用助记符的原因)?

您可以像在rootKey示例中所做的那样,以字节形式提供熵,也可以使用bech32编码的私钥,如下所示:

代码语言:javascript
复制
const rootKey = CardanoWasm.BIP32PrivateKey.from_bech32("xprv17qx9vxm6060qjn5fgazfue9nwyf448w7upk60c3epln82vumg9r9kxzsud9uv5rfscxp382j2aku254zj3qfx9fx39t6hjwtmwq85uunsd8x0st3j66lzf5yn30hwq5n75zeuplepx8vxc502txx09ygjgx06n0p");
票数 9
EN

Stack Overflow用户

发布于 2021-03-04 16:01:09

Stack Overflow用户

发布于 2022-08-30 00:21:06

@soccer193,是不是每个地址都需要一个新的密钥?

const utxoPubKey = accountKey .derive(0) // .derive(0) .to_public();

const stakeKey = accountKey .derive(2) //嵌合.derive(0) .to_public();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66117174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档