比特币的多重签名机制使用篇

栏目:比特币高阶 作者:btcer 评论:0 点击: 4,326 次

这篇是研究比特币多重签名的机制,如果要这样使用的话.肯定不易推广.将来会改进的.多重签名也可能整合到钱包里面.

概述

比特币的多重签名机制可以实现多方共同管理资产,也可以用于第三方交易担保。

多重签名最多支持三方共同管理一个地址的资产。按照比特币wiki上的表述方式,称之为:

clip_image002

一般有 1 of 1, 1 of 2, 1 of 3, 2 of 3, 3 of 3几种模式。通常情况下,多应用于N = 3 的情形。

1 of 3: 三个管理者中,任何一方都可以单独的处理该地址的资产。

2 of 3: 三个管理者中,必须有两方共同签署才能处理该地址的资产。

3 of 3: 三个管理者必须都签署才能处理该地址的资产。

本文就以 2 of 3的情形来介绍一下使用多重签名的方法。

制作多重签名地址

首先,制作多重签名地址用到比特币钱包的API. 熟悉命令行的读者可以直接在“命令提示符”窗口里运行bitcoind调用相应的命令。可能大部分读者对“命令提示符”并不熟悉,所以本文用“比特币核心”钱包的调试窗口来演示。

要制作多重签名地址,首先需要参与管理的三方提供各自的公钥。

管理者1:

clip_image004

管理者2:

clip_image006

管理者3:

clip_image008

那么,这些公钥是如何获取的呢?

首先,打开“比特币核心”钱包。点击“帮助”->”调试窗口”,在弹出的“Debug window”窗口点击“控制台”。进入图1控制台的界面:

clip_image009

在该界面下面的输入框里,输入:

clip_image011

钱包会为我们生成一个新的地址。如图2clip_image012获取新地址

clip_image013

这便是上面管理者1的地址。但制作多重签名,只有地址还不够,还需要对应的公钥。公钥可以通过地址来查询出来。使用命令clip_image012[1]

clip_image015

得到如图三(图3获取公钥)的公钥界面:

clip_image016

clip_image012[2]

其中,“pubkey”后面的数据便是该地址的公钥。 clip_image012[3]取得三个管理者的公钥之后,就可以用

createmultisig命令来生成多重签名地址。首先,看一下该命令的基本格式:

clip_image018

clip_image012[4]

我们要创建的是2 of 3的模式,所以命令里n=2。输入命令如下:

clip_image020

得到如图4(生成多重签名地址)的地址界面:

clip_image021

上图中的3M8voDot82tBrQE7QWGy9WUWxp7gDU7owx,就是我们生成的多重签名地址。然后将这个地址增加到钱包里,只有这样,当收到比特币时,钱包才会有显示。用命令

clip_image023

如果忘记了输入这条命令,钱包便无法显示这个地址上的金额。而且,在这条命令运行前汇款到地址上的币也不会显示出来。遇到这样的情况,需要重新从头开始同步区块链。

我们可以向该地址中汇两笔钱,用于测试。如图5(收款成功)

clip_image024

从多重签名地址付款

接下来,我们要演示从多重签名地址付款。我们设置的是2 of 3的模式,就是说,三个管理者中,持有任意两人的私钥便可付款。我们假设现在持有的是管理者1和管理者3的私钥。

管理者1clip_image025

clip_image027

管理者3clip_image025[1]

clip_image029

获取私钥的方法也很简单,只要使用如下命令即可:

clip_image031

第一步:获取地址上的交易信息

使用listunspent,结果如图(图6地址上的交易信息):

clip_image032

我们一共向这个地址进行了两次汇款,因为要手动构建交易单,所以,就只能针对具体的每一笔交易进行设置。如果那笔交易上的钱比要花费的多,就要自己设置找零操作。我们用第一笔交易做示例。从0.01个比特币里,付款0.005到一个新地址

1KfqXpdhdtSqhACSeMvNoFSeXFGV5j8PkT,找零地址为:18eHb5P7N4ZAKURetN6pjF1jTGdD3HThrj

clip_image025[2]

首先,我们需要记录第一笔交易的如下几个参数:

第二步:构建交易单:

clip_image034

输出如下(图7构建交易单):

clip_image025[3]

clip_image036

第三步:用第一个私钥对交易单签名

clip_image037

命令的第一个参数,就是createrawtransaction的输出。第二个关于txid的参数,与上面的相同。最后一个参数,是私钥,我们用的是管理者1的私钥。

clip_image039

输出如图:

clip_image040

可以注意到complete字段是false,因为我们只用了一个私钥签名。然后,将输出的hex字段取出,用第二个私钥再次签名。

第四步:用第二个私钥签名:输入命令:

clip_image042

输出如图(图8第二次签名):

clip_image043

可以看到,第二次签名后,complete字段是true,说明签名成功。我们可以使用该地址的币了。

第五步:发送交易单

将上一步的输出hex部分,用sendrawtransaction命令发送到网络上:

clip_image045

输入命令:

clip_image025[4]clip_image025[5]clip_image046

查询交易ID cd2494071876f91e1f9505f5c5421088c7df2e6f939c17f742d3638bc7df789a即可看到这笔钱的花费情况。

clip_image047

使用脚本

如果您读到了这里,首先感谢您的耐心。上面的命令确实让人抓狂。再加上windows下各种符号的兼容问题,笔者测试时几乎吐血了。幸运的是在开源社区,已经有了很多方便的脚本工具。这里,笔者修改了一个开源代码,可以方便大家进行多重签名地址的创建和消费。代码地址在:https://github.com/johnsondiao/blackboard101https://github.com/johnsondiao/python-bitcoinrpc脚本是用python写的。首先需要安装python2.7.6。安装方法这里不再赘述。python-bitcoinrpc是一个bitcoin的库文件,需要对其中的setup.py文件运行

clip_image049

命令将库安装到python里。

然后,在比特币钱包的路径(wallet.dat所在的目录)里添加bitcoin.conf文件。

文件内容如下:

clip_image051

wbn_multisigs_pt1_create-address.py脚本用来生成多重签名地址。

wbn_multisigs_pt2_spend-funds.py脚本用来发送多重签名地址的币。

具体的使用方法,就不再说明了,可以用python的IDLE来运行调试。构建多重签名地址的运行截图如下:

clip_image052

花费多重签名地址的程序运行如下:

clip_image012[5]

clip_image053

来源:壹比特

作者:壹比特技研团队



0

声明: 本文由( btcer )原创编译,转载请保留链接: 比特币的多重签名机制使用篇

比特币的多重签名机制使用篇:等您坐沙发呢!

发表评论


    分享到:
11.5K

若觉得本站内容对您有用,欢迎随手打赏

地址 1EwvVKfHm34h8bzKTx8NjT8nHjsRrjGhvm

比特币常用网址:
交易查询(国外):http://blockchain.info/
交易查询(国内):http://qukuai.com
中文维基:https://zh-cn.bitcoin.it/
BTC客户端:http://bitcoin.org/en/choose-your-wallet
行情汇总:http://z.btc123.com/

"In computing we trust."
我们信任计算

什么是比特币?比特币™ (BitCoin)是一种P2P形式的虚拟货币。点对点的传输意味着一个去中心化的支付系统。比特币不依靠特定货币机构发行,它通过特定算法的大量计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。基于密码学的设计可以使比特币只能被真实的拥有者转移或支付。这同样确保了货币所有权与流通交易的匿名性。