门罗多重签名操作指南

因为M/N多签名钱包推出还不久,当前还没有一篇文章完整介绍门罗M/N多签名钱包使用指南。本文旨在收录所有使用M/N多签名钱包时要用到的知识。
《财富代码》-深度分析、挖掘区块链价值项目,https://www.first.vip/hodl

因为M/N多签名钱包推出还不久,当前还没有一篇文章完整介绍门罗M/N多签名钱包使用指南。本文旨在收录所有使用M/N多签名钱包时要用到的知识。

多签名钱包对于有安全存储加密货币需求的散户和机构而言,相当重要。多签名钱包可以防止私钥被盗和丢失。多签名钱包是一种行业标准的安全实践,应用于大多数交易所、网页钱包、加密基金、基金会和其他巨额加密货币托管商。

 门罗多重签名操作指南

本文主要介绍门罗,但大多数人第一次接触多签名可能是比特币的多签名地址。在底层逻辑上,门罗的工作原理与比特币大有不同,所以门罗开发者要设想一个全新的系统来实现多签名。他们无法依赖比特币的脚本语言,而选择用门罗的加密系统来保护用户隐私。

门罗推出多签名经历了两个阶段。第一个阶段,2017年底门罗引入了 N/N 和 N-1/N 多签名,支持类似 2/2 和 2/3 钱包这样的多签名模式。第二阶段,2018年底门罗推出了M/N钱包,M可以取任意小于N的值。包括钱包模式,比如3/5模式。

现在来设置一个初始的门罗多签名钱包。

门罗多签名钱包设置

声明:M/N多签名钱包中存在一个漏洞,有时会阻止从M/N钱包中支出资金。这个漏洞在最近版本v0.13.0.4得以修复,因此在用M/N多签名钱包存储大量资金之前,请一定要测试你钱包的工作流。本文的指南能可靠地在门罗主开发分支上工作。

手动设置门罗多签名钱包是一个相当漫长乏味的过程,因为参与的几个钱包需要共享好几轮数据,创建多签名密钥来查看和签署交易。N/N、N-1/N 和 M/N 三种钱包的设置方式都不同,M/N 的设置最为复杂,创建一个3/5钱包需要25道钱包步骤。我认为最简单的方式,是将设置自动化,从而降低失败率并节约时间。

对于任意一种多签名设置,门罗的命令行程序中都有一个生成钱包的应用程序,也就是monero-gen-trusted-multisig。如果你想要在一台受信任的计算机上生成多人参与的多签名钱包,monero-gen-trusted-multisig程序可以出色地完成任务。调用如下,设置成你想要的模式:

$ monero-gen-trusted-multisig --scheme=3/5 --filename-base=wallet

如果这个调用无法满足你的要求,你就需要做一个更复杂的设置。本文简单介绍各种钱包设置流程,但只会详细介绍 M/N 钱包设置指南(针对 N/N 和 N-1/N 钱包,已经有很棒的指南)。

以下是生成三种类型多签名钱包要用到的指令。可用命令行 monero-wallet-cli 或 JSON-RPC 服务器  monero-wallet-rpc 来运行这些指令。针对每个指令,各个参与钱包只能运行一次,至于每个命令要使用哪些参数,请参考Monero Wallet RPC 指南

请一定要尝试创建新钱包,或用空钱包作为多签名钱包参与方。如果你让一个带有资金的签名钱包参与多签名钱包,资金将无法找回。

M/N设置

1.create_wallet

2.prepare_multisig

3.make_multisig

N-1/N钱包设置

1.create_wallet

2.prepare_multisig

3.make_multisig

4.finalize_multisig

M/N钱包设置

1.create_wallet

2.prepare_multisig

3.make_multisig

4.exchange_multisig_data(多轮交换)

M/N 钱包设置详情

基于M/N钱包设置步骤繁多,我们将以JSON-RPC API来表示命令。如果你使用monero-wallet-rpc程序来设置钱包,在启动时你需要完成--wallet-dir操作。

1.create_wallet (N次)

2.prepare_wallet (每个钱包N次)

3.make_multisig (每个钱包N次)

4.exchange_multisig_data (每个钱包M-N轮, N次)

5.[可选的] is_multisig

1.create_wallet(创建钱包)

首先,创建N个将参与这个多签名钱包的钱包。

Request

{

   "jsonrpc": "2.0",

   "id": "0",

   "method": "create_wallet",

   "params": {

       "filename": "wallet_0",

       "password": "",

       "language": "English"

   }

}

Response

{

   "id": "0",

   "jsonrpc": "2.0",

   "result": {}

}

2.prepare_wallet(准备多签名钱包)

接下来你会接收第一轮各个钱包的多签名数据。你需要保存multisig_info返回字段。注意:如果此步骤你是用API自动化操作,在每次调用prepare_multisig(准备多签名钱包)时,也要调用close_wallet和open_wallet命令。为简单起见,本文省略了调用步骤。

Request

{

   "jsonrpc": "2.0",

   "id": "0",

   "method": "prepare_multisig"

}

Response

{

   "id": "0",

   "jsonrpc": "2.0",

   "result": {

       "multisig_info": "MultisigV1aFJ22AwxbBW6YkJH9…"

   }

}

3.mark_wallet(制作多签名钱包)

Make Multisig命令将每个钱包转换为多签名钱包。你需要在每个参与钱包上运行这个命令。make_multisig需要两个参数:

1. multisig_info是multisig_info的一个数组,返回所有其他钱包上一步操作数据(除了这个现在正在操作当中的钱包),

2.threshold(阀值),即发送交易时需要签名的钱包数量(M/N当中的“M”)。

像prepare_multisig, make_multisig 这样的命令都需要返回multisig_info数据,并将数据保留,在下一步当中使用

Request

{

   "jsonrpc": "2.0",

   "id": "0",

   "method": "make_multisig",

   "params": {

       "multisig_info": [

           "MultisigV1E1s9eCf4kWDa282j9f…",

           "MultisigV1NahETBVSqVtdbfZ4hz…",

           "MultisigV1SQWPjeNuJKyHT88KA2…",

           "MultisigV1i1UZiz3KtxQSwWReGR…"

       ],

       "threshold": 3

   }

}

Response

{

   "id": "0",

   "jsonrpc": "2.0",

   "result": {

       "address": "41fJjQDhryD11111111111111111111111…...",

       "multisig_info": "MultisigxV1KUADv8n3GBJCrpDu…..."

   }

}

4.exchange_multisig_data(交换多签名密钥)  

创建多签名钱包的最后一步是exchange_multisig_keys命令。该命令选用multisig_info参数,也就是multisig_info的一个数组,用于返回其他钱包上一步骤的数据。返回字段也包括其他钱包的multisig_info字段,需要保留便于下一步使用。

根据你的钱包设置,你需要多次操作exchange_multisig_keys命令。在M/N多签名模型下,需要N-M轮。例如,你设置的是3/5钱包,则需要5-2轮。

在每一轮当中,multisig_info返回其他钱包上一轮的数值将用作参数。一旦你完成最后一轮,multisig_info 返回值将为空串行。

Request

{

   "jsonrpc": "2.0",

   "id": "0",

   "method": "exchange_multisig_keys",

   "params": {

       "multisig_info": [

           "MultisigxV1KUADv8n3GBJCrpDuavNpaPT…",

           "MultisigxV1TJyJjqRwEuPePPE8PuNBLmB…",

           "MultisigxV1jZvNKUnrGsSS85qQiSCs6i3…",

           "MultisigxV16KauRuvCPekZEHdDgjP8Jhf…"

       ]

   }

}

Response

{

   "id": "0",

   "jsonrpc": "2.0",

   "result": {

       "address": "",

       "multisig_info": "MultisigxV1dXxJPiqpUNSU2DjLmX8Ct…"

   }

}

5. (Optional) Check multisig status

At the end of the setup process, you can run the is_multisig command to check that the setup was correct. This returns a JSON object that reports the wallet’s multisig status.

Request

{

   "jsonrpc": "2.0",

   "id": "0",

   "method": "is_multisig"

}

Response

{

   "id": "0",

   "jsonrpc": "2.0",

   "result": {

       "multisig": true,

       "ready": true,

       "threshold": 3,

       "total": 5

   }

}

从你的钱包消费

希望你已收到了is_multisig命令设置完成和支持使用的好消息。现在开始使用钱包吧。

从M/N多签名钱包消费与其他钱包的花费模式相同,你可以遵循N/N和N-1/N当中的使用指南。

使用JSON-API来花费钱包会有一个棘手的地方便是,可能会出现LR not found for enough participants(LR没有找到足够的参与者)错误。如果出现该错误,正在参与交易的钱包需要在调用export_multisig_info命令之前运行refresh(刷新)命令。如果你使用的是命令行程序,它会在你需要刷新时提醒你。在使用 JSON-API程序当中,只需用refresh清理这种错误。

结语

上面的步骤之多可能令你惊讶不已,特别当你要在一堆不同计算机面前协调数据交换时更会发出感叹。好在的是,门罗社区成员正在开发一款软件简化整个多签名设置流程。最近门罗通讯系统(Monero Messaging System,简称MMS)正在测试当中,将会提供为多签名设置提供更多引导和自动化操作,包括保护跨计算机进行多签名数据通讯时的安全。

希望本文有帮助到你使用门罗多签名钱包。

翻译 | Tracey
采编 | 筋斗云
转载请保留文末信息,谢谢

本文由 区块链资讯平台头等仓 作者:筋斗云 发表,其版权均为 区块链资讯平台头等仓 所有,文章内容系作者个人观点,不代表 区块链资讯平台头等仓 对观点赞同或支持。如需转载,请注明文章来源。
《财富代码》-深度分析、挖掘区块链价值项目,https://www.first.vip/hodl

发表评论