我应该如何使用Ripple-lib或官方api正确创建波纹纸钱包?

时间:2018-01-12 04:03:03

标签: ripple

我正在尝试使用官方的Ripple Api,ripple-lib创建纸质钱包。

generateAddress()接受一些参数。

'use strict';
const RippleAPI = require('ripple-lib').RippleAPI;

const api = new RippleAPI({
  server: 'wss://s1.ripple.com' // Public rippled server
});
api.connect().then(() => {
  return api.generateAddress();
}).then(info => {
  console.log(info);
  console.log('getAccountInfo done');

  /* end custom code -------------------------------------- */
}).then(() => {
  return api.disconnect();
}).then(() => {
  console.log('done and disconnected.');
}).catch(console.error);

此代码实际上创建了一个密钥和一个"地址"。

{
  secret: 'sheWb..................HRyLhk',
  address: 'rNLJ.......................qu3nbb'
}

确定。现在我创建了我的帐户。如果我用20XRP储备资助它,它将成为一个活跃的Ripple账户。耶!

但我不明白:

  • 哪个或如何获取我的公钥?
  • 这是或如何获得我的主公钥?
  • generateAddress()方法接受三个参数。这里描述:https://ripple.com/build/rippleapi/#generateaddress但我不知道如何编写这些参数。我对此感兴趣,因为我认为在第一个参数中,"选项"对象是我可以定义密钥的密码的地方。也许我错了。

愿任何人对这些担忧有所了解吗?

修改 我现在认为传递给generateAddress()的选项对象是传递给此处描述的构造函数RippleApi()的相同选项参数https://ripple.com/build/rippleapi/#parameters任何人都可以确认这一点吗?

2 个答案:

答案 0 :(得分:1)

对于纸质钱包,您只需要地址(公开)和秘密(私人):

https://github.com/Bithomp/xrp-paper-wallet

实际上,只有秘密就足够了,因为你可以从秘密获得地址

https://github.com/Bithomp/bithomp-tools

在Ripple中,您不必为每个新订单/用户使用新帐户。对于每笔新交易,您都可以使用目标代码。这就是您如何识别客户/订单。 Ripple还支持按键旋转,因此如果主密钥被暴露,您可以禁用它并使用常规密钥。在最佳实践中,您可以分配常规密钥并使用它来在线签署交易,并且主密钥始终处于脱机状态。如果普通密钥被暴露,您可以用新的常规密钥替换它。

在涟漪中,您可以使用密钥对(公钥+私钥)或密钥对交易进行签名。

你可以在https://iancoleman.io/bip39/

获得涟漪的密钥对

ripple-lib的generateAddress()为您提供:

1)涟漪地址(您的公开地址)以r

开头

您可以分享,它可以用来向您发送付款。 您可以在资源管理器中搜索公共地址。

例如:https://bithomp.com/explorer/r9fVvKgMMPkBHQ3n28sifxi22zKphwkf8u

2)密码 - 主密钥,用于签署交易。

3)您还可以指定常规密钥https://developers.ripple.com/assign-a-regular-key-pair.html

选项只有两个参数:

  • 算法字符串,用于生成地址的数字签名算法。可以是ecdsa-secp256k1(默认)或ed25519。

  • entropy array \ integer,用于生成种子的熵。

希望它有所帮助..

答案 1 :(得分:1)

  

generateAddress()方法接受三个参数。描述   此处:https://ripple.com/build/rippleapi/#generateaddress但我不知道   了解如何编写这些参数。我对此很感兴趣   因为我认为在第一个参数中,“选项”对象是   我可以在其中定义密钥的密码。也许我是   错误的。

以下是一些JavaScript代码,用于演示将熵输入到 generateAddress 方法中。

// This functions works on modern browswers, not sure about Node.js. Try https://www.npmjs.com/package/js-sha512 or https://nodejs.org/api/crypto.html
async function fun_SHA512_array(entropy) {
    'use strict';

    // Turns a string into an array of integers.
    // Made possible by https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

    const msgUint8 = new TextEncoder().encode(entropy);                           // encode as (utf-8) Uint8Array
    const hashBuffer = await crypto.subtle.digest('SHA-512', msgUint8);           // hash the message
    const hashArray = Array.from(new Uint8Array(hashBuffer));                     // convert buffer to byte array
    // const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string

    return hashArray;
}

const str_entropy = "Use a cryptographically strong, randomly created string of characters here.";
// Or, your passphrase string would go here.
// Or, you could use a BIP39 Mnemonic but you'd have to remember how you constructed the string. e.g. Did you separate the words with a comma or with a space?
// Or, on the linux terminal you can use: openssl rand -base64 n
// Where n = the number of characters you wish to randomly generate. Which are then converted to base64, therefore the amount of characters ends up being more than n.

var array_sha512 = [];

fun_SHA512_array(str_entropy).then(array_sha512 => {
    var obj_new_account = api.generateAddress({"entropy": array_sha512});
    var str_secret = obj_new_account.secret;
    var str_public_address = obj_new_account.address;

    console.log(str_secret);
    console.log(str_public_address);
});

请记住,熵就像种子一样,并且总是会生成相同的秘密地址