Mina 文档 - 高级篇 之 Ledger硬件钱包

  • MinaFans
  • 更新于 2021-12-17 16:26
  • 阅读 3156

Mina 开发者中文文档

4.10 Ledger硬件钱包

您可以使用您的Ledger Nano S硬件钱包安全存储您的Mina私钥。

我们正在研究对Ledger Nano X的支持,但还没有完成。

支持的操作包括

● 密钥对生成

● 签署付款交易

● 签署委托交易

目前,我们还在进行一个独立的安全审核评估,尚未发现漏洞,不然开发工作早就接近完成了。在接下来的一周左右,我们将调整一个与签名相关的常量,这样的话交易就不能从测试网重放到主网。请注意,这并不影响密钥的生成。

该应用程序还不能通过实时用户界面进行安装,但如果您有一个Nano S,您可以按照下面的说明把它侧载到您的ledger设备上。

警告

目前,我们还在进行一个独立且尚未发现漏洞的安全审核评估,不然的话开发工作已快接近完成了。

使用时请自负风险。并确保您备份了您的分类ledger的BIP39私密助记语,或者使用一个单独的ledger设备来测试这个应用程序。

永远不要在主网的测试网中重复使用相同的密钥对!

内容

在Ubuntu安装

安装在Mac

在Windows上安装

生成一个密钥对

验证您的私钥

离线模式

安装在Ubuntu上

在安装之前,请确保您的ledger设备已更新到最新的固件并已完全配置。特别是,确保Ledger的udev规则已经安装。

如果安装了udev规则,则会存在/etc/udev/rules.d/20-hw1.rules。如果这个文件不存在,那么您需要访问Ledger的网站,并按照Linux说明修复连接问题,或者,对于高级用户来说,您可以在LedgerHQ Github上找到udev规则。

1)安装Python 3

$ sudo apt-get install python3

2)安装pip3

$ sudo apt-get install python3-pip

3)安装必备库

sudo apt-get install libudev-dev libusb-1.0-0-dev python-dev virtualenv

4)为Ledger Blue, Nano S和Nano X安装Python工具

$ sudo pip3 install ledgerblue

5)下载ledger-app-mina

从Github下载最新的ledger应用程序Mina版本。我们目前已经测试了1.0.0-beta.4版本。

6)验证校验和

sha256sum ledger-app-mina-1.0.0-beta.4-0-gb92ffef9.tar.gz

将上述命令的输出与发布在下载页面上的SHA256哈希值进行比较。如果它们匹配,则继续下一步。

7)提取存档

$ tar xvzf ledger-app-mina-1.0.0-beta.4-0-gb92ffef9.tar.gz
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/README
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/install.sh
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/uninstall.sh
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/mina_ledger_wallet
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/bin/app.hex

8)启动安装脚本

注意:如果您已经安装了以前的版本,您可以通过uninstall.sh卸载。

$ cd ledger-app-mina-1.0.0-beta.4-0-gb92ffef9
$ ./install.sh
Please unlock your Ledger device and exit any apps (press any key to continue)
Generated random root public key : b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'
Using test master key b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'

这将开始应用程序的安装(在接下来的步骤中继续进行操作)。

重要提示:如果您已经在步骤(6)中验证了校验和,那么您可以在后续步骤中忽略上面的公钥以及“应用程序标识符”和“应用程序完整哈希值”。这些警告是因为Ledger -app-mina还不是一个公认的的ledger应用。

9)允许“不安全管理器”

您的ledger设备会警告您安装脚本是一个不安全的管理器。

< X Deny unsafe manager >

点击左键直到您看见脚本

< ✓ Allow unsafe manager >

选择这个选项

10)安装 Mina应用

您的ledger设备会询问您是否想安装Mina应用程序。

< M Install app Mina >

点击左键直到您看见脚本

< ✓ Perform installation >

选择此选项并输入您的帐户PIN码。

如果安装成功,安装脚本将成功终止,您将在已安装的应用程序列表中看到Mina徽标。

11)安装命令行钱包

$ sudo cp ./mina_ledger_wallet /usr/local/bin/

在Mac上安装

在安装之前,请确保您的ledger设备已更新到最新的固件并已完全配置。

1)安装 Homebrew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

欲了解更多信息,请访问Homebrew网站

2)安装python3

brew install python3

3)为Ledger Blue, Nano S和Nano X安装Python工具

$ pip3 install ledgerblue

4)下载ledger-app-mina

从Github下载最新Mina版本的ledger应用程序。

5)校验

shasum -a 256 ledger-app-mina-1.0.0-beta.4-0-gb92ffef9.tar.gz

将上述命令的输出与发布在下载页面上的SHA256哈希值进行比较。如果它们匹配,则继续下一步。

6)提取存档

$ tar xvzf ledger-app-mina-1.0.0-beta.4-0-gb92ffef9.tar.gz
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/README
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/install.sh
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/uninstall.sh
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/mina_ledger_wallet
ledger-app-mina-1.0.0-beta.4-0-gb92ffef9/bin/app.hex

7)启动安装脚本

注意:如果您已经安装了以前的版本,您可以通过uninstall.sh卸载。

$ cd ledger-app-mina-1.0.0-beta.4-0-gb92ffef9
$ ./install.sh
Please unlock your Ledger device and exit any apps (press any key to continue)
Generated random root public key : b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'
Using test master key b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'

这将开始应用程序的安装(在接下来的步骤中继续)

重要提示:如果您已经在步骤(5)中验证了校验和,那么您可以在后续步骤中忽略关于上面的公钥以及“应用程序标识符”和“应用程序完整哈希值”的消息。这些警告是因为Ledger -app-mina还不是一个被批准的ledger应用。

8)允许“不安全管理者”

您的ledger设备会警告您安装脚本是一个不安全的管理器。

< X Deny unsafe manager >

点击左键直到您看见脚本

< ✓ Allow unsafe manager >

选择这个选项。

9)安装app Mina

您的ledger设备会询问您是否想安装Mina应用程序。

< M Install app Mina >

点击左键直到您看见脚本

< ✓ Perform installation >

选择此选项并输入您的帐户PIN码。

如果安装成功,安装脚本将成功终止,您将在已安装的应用程序列表中看到Mina徽标。

10) 安装命令行钱包

$ sudo cp ./mina_ledger_wallet /usr/local/bin/

在Windows上安装

在安装之前,请确保您的ledger设备已更新到最新的固件并已完全配置。

1)安装Python 3.9.1

下载并运行python安装程序:(https://www.python.org/ftp/python/3.9.1/python-3.9.1-amd64.exe)

2)打开Powershell

按Windows + R打开运行菜单,键入“Powershell .exe”,按Enter启动Powershell

3)为Ledger Blue, Nano S和Nano X安装Python工具

在powershell终端中,执行如下命令:

$ pip3 install ledgerblue

4)下载ledger-app-mina

从Github下载最新Mina版本的ledger应用程序。

5)校验和

在powershell终端中,执行如下命令:

Get-FileHash -Path ledger-app-mina-1.0.0-beta.4-0-gb92ffef9.zip

将上述命令的输出与发布下载页面上的SHA256哈希值进行比较。如果它们匹配,则继续下一步。

6)提取存档

右键单击Downloads文件夹中的.zip文件,并选择Extract All...在生成的窗口中,只需按下“Extract”就可以解压缩存档。

7)更改目录到新提取的存档

PS > cd ledger-app-mina-1.0.0-beta.4-0-gb92ffef9

8)(可选)卸载以前版本的mina应用程序

如果您之前已经安装了mina应用程序,用下面的命令卸载旧版本:

PS ...\ledger-app-mina-1.0.0-beta.4-0-gb92ffef9> python3 -m ledgerblue.deleteApp "--targetId" "0x31100004" "--appName" "Mina"

确保批准账簿设备本身上的任何提示。

9)开始安装新版本

PS ...\ledger-app-mina-1.0.0-beta.4-0-gb92ffef9> python3 -m ledgerblue.loadApp "--path" "44'/12586'" "--appFlags" "0x240" "--tlv" "--targetId" "0x31100004" "--targetVersion=1.6.0" "--delete" "--fileName" "bin/app.hex" "--appName" "Mina" "--appVersion" "1.0.0" "--dataSize" "64" "--icon" "010000000000ffffffffffffffffffeff7c7e393c9b3cdb3cdb3cdb3cdb3cd33cc799effffffffffff"

Please unlock your Ledger device and exit any apps (press any key to continue)

Generated random root public key : b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'

Using test master key b'04e95715d4813ab98c92833da9b169d3ff6ee11a4f94a465503cc91e77aaea688d45a0449f41bfaa2a1a789730e72d0ace759ca7c2b8a12e82c94cda61530cc363'

这将开始应用程序的安装(在接下来的步骤中继续)

重要提示:如果您已经在步骤(5)中验证了校验和,那么您可以在后续步骤中忽略关于上面的公钥以及“应用程序标识符”和“应用程序的完整哈希值”的消息。这些警告是因为Ledger -app-mina还不是一个被批准的ledger应用。

10)允许“不安全的管理者”

您的账簿设备会警告您安装脚本是一个不安全的管理器。

< X Deny unsafe manager >

点击左键直到您看到脚本

< ✓ Allow unsafe manager >

选择这个选项。

11)安装app Mina

您的ledger设备会询问您是否想安装Mina应用程序。

< M Install app Mina >

点击左键直到您看到脚本

< ✓ Perform installation >

选择此选项并输入您的帐户PIN码。

如果安装成功,安装脚本将成功终止,您将在已安装的应用程序列表中看到Mina徽标。

12)使用命令行钱包

稍后当命令在这些文档中引用mina_ledger_wallet时,从同一个powershell提示符中执行如下命令./mina_ledger_wallet ...

生成一个密钥对

注意,在ledger设备上,生成的密钥对实际上并不存储任何东西!ledger每次运行时都会重新获得密钥。这意味着在卸载/重新安装此应用程序时,您不需要担心丢失密钥。

要获得一个密钥对并获得关联的Mina地址,请在您的Ledger设备上打开Mina应用程序,然后在您的终端上使用mina_ledger_wallet命令。

例如,要获得硬件钱包帐户42 (BIP44'/12586'/42'/0/0))对应的Mina地址,可以发出以下命令。

$ mina_ledger_wallet get-address 42

系统将提示您确认

Get address for account 42 (path 44'/12586'/42'/0/0)

Continue? (y/N) y

一旦确认,您会看到

Generating address (please confirm on Ledger device)...

当总账设备将显示在您的终端上时,这告诉您所请求的操作类型。

跟随箭头指示,按下并松开您ledger上的右键。

ledger现在将显示您所请求的地址的BIP44路径。

Path (1/2)

 44'/12586'/42'/0 >

注意,上面路径中的42'对应于帐号。检查路径的帐号与您提供给get-address命令的帐号参数是否匹配。

再次按下右键,直到显示总账

✓

<   Generate   >

现在同时按下左和右按钮来选择这个选项并生成地址。

现在将显示ledger

Processing...

同时生成密钥对。

由于Mina使用了硬件还不支持的新椭圆曲线,所以这个过程可能需要47秒。

一旦完成,总账将显示地址,供您仔细核对和确认。

Address (1/4)

B62qnh5DZeX6eYFv >

通过审批后,mina_ledger_wallet命令将输出结果,您可以使用它。

Received address: B62qnh5DZeX6eYFvtBn4nBTniXbN7R6cgKo6gYqQ7E2bKwLD3PTYZ4b

您的地址42将不同于以上结果。

注意

在生成地址时,如果可能的话,应该从帐户0开始,并在每次需要新地址时按顺序增加帐户号。

验证您的私钥

为了验证您的私钥,请确保您已经更新到mina后台程序的最新版本。安装说明可以在连接页面上找到。

现在您已经创建了密钥——您需要验证它是否有效。对于这个密钥对,它足以验证来自ledger的签名交易是否被正确解析,以及签名是否在Mina上验证。

执行如下命令:

mina_ledger_wallet test-transaction 42 B62qnzbXmRNo9q32n4SNu2mpB8e7FYYLH8NmaX6oFCBYjjQ8SbD7uzV | mina advanced validate-transaction

用您的公钥代替“B62q…,用您的BIP44账号代替42。警告:请确认您的account_address与account_number相对应!

您需要查看您的总账,检查交易细节,选择“接受”或“拒绝”。

如果您拒绝,将不会生成任何测试交易,并且此命令将退出并显示错误。

如果您接受,将生成一个测试交易,您应该看到以下输出:

Transaction was valid

All transactions were valid

离线模式

发送交易的另一种方法便是使用ledger工具的离线模式。此模式允许您在不将ledger设备连接到现行守护进程的情况下签署交易。您可以使用mina_ledger_wallet工具将--offline标志附加到任何命令中,但是我们将提供一个示例,说明如何使用离线模式发送交易。

签署离线交易

第一步是使用ledger的离线模式签署交易:

1.使用以下命令生成一个已签名的交易:

mina_ledger_wallet send-payment --offline

在离线模式下,必须指定--nonce--fee参数。为了对测试网交易进行签名,您必须指定——--network testnet参数(默认为mainnet)。

注意

如果您不在主网上,请确保包含了--network testnet参数,以便ledger知道为testnet签署交易。为主网签署的交易可以在主网上重播。

1.复制该命令的输出。

输出将是下一节需要的JSON 助记词。它应该是这样的:

{
 "signature": "389ac7d4077f3d485c1494782870979faa222cd906b25b2687333a92f41e40b925adb08705eddf2a7098e5ac9938498e8a0ce7c70b25ea392f4846b854086d43",
 "payment": {
  "to": "B62qnzbXmRNo9q32n4SNu2mpB8e7FYYLH8NmaX6oFCBYjjQ8SbD7uzV",
  "from": "B62qnzbXmRNo9q32n4SNu2mpB8e7FYYLH8NmaX6oFCBYjjQ8SbD7uzV",
  "fee": "10000000",
  "token": "1",
  "nonce": "0",
  "memo": null,
  "amount": "1000000000",
  "valid_until": "4294967295"
 },
 "stake_delegation": null,
 "create_token": null,
 "create_token_account": null,
 "mint_tokens": null
}

提交交易

目前这个步骤需要一个连接到网络的并且运行的守护进程,但是您也可以将这个交易提交到任何第三方网关。

  1. Devnet上运行一个守护进程。
  2. 执行以下send-rosetta-transactions命令。
mina advanced send-rosetta-transactions
  1. 粘贴上一节中mina_ledger_wallet的输出,然后按Ctrl-D提交交易。

这将在网络上发送签名的交易。如果成功发送了交易,您应该会看到以下输出:

Dispatched command with TRANSACTION_ID 4Rs6xMHVyo1J1TTQDCzynYvWPdBr9
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
MinaFans
MinaFans
minafans.tech