2014/07/23 | 数字货币 多重签名 bitcoin litecoin
类别(有的没的) | 评论(0) | 阅读(227) | 发表于 18:14

引用:http://bbs.btcman.com/thread-1311-1-2.html

 

帮助-调试窗口-控制台:

商家A输入, validateaddress <商家的任意收款地址>

获得公钥 pubkey_A ,并对外公开。

买家B输入,validateaddress  <自己的任意收款地址>
获得公钥 pubkey_B,
然后再输入 addmultisigaddress 2 '["<pubkey_A>","<pubkey_B>"]'           // 记得替换掉啊。<>符号也替换掉,下同。
则可生成多重签名的<收款地址C>
买家发币给<收款地址C>, 并把pubkey_B发给商家

等待全网确认。
此时<收款地址C>,需要商家A和买家B同时签名,才能转币出去,也就是P2P担保地址。

商家收都买家发来的信息时,先检查买家确实是发给担保地址,输入
商家: addmultisigaddress 2 '["<pubkey_A>","<pubkey_B>"]' 
则可获得<收款地址C>,可检查买家确实是发送币到< P2P担保地址 - 收款地址C>上。
若相同,则可以确认是与你相关的担保地址,则可以发货。否则是假的。
另外的,Bitcoin的<P2P担保地址> 有个直观的特点, 其是以3xxxxx开头的收款地址(2开头的是测试网络的)

此时买家可以等到货确认了。

----------- 确认到货 -------
如果确认到货的话,则需要输入.
商家:  createrawtransaction '[{"txid":"<交易ID>","vout":0}]' '{"<商家的任意收款地址>":<币值>}'
会生成:会生成<16进制的交易数据1>
以上<交易ID>是之前发送给<收款地址C>时的交易ID,在买家发送时候会有生成,也可以blockchain或交易记录上查询,一般需要买家提供信息才行。
商家:  signrawtransaction <16进制的交易数据1>
会生成 <部分签名与交易数据1>
将生成的<部分签名与交易数据1>,发给买家,需要买家来签名。
以上操作可以提早做,比如在发货的同时,发给的买家的。
/////
买家拿到商家的<部分签名与交易数据1>,先检查下确实是从<p2p担保地址C>里转币出去的,防止转的是自己其他地址的币。(这部分原文档上是没有的,我这里加上去。)
买家:  decoderawtransaction  <部分签名与交易数据1>
检查vin.txid = <交易ID>,确认是对的,则输入
买家:  signrawtransaction <部分签名与交易数据1>
会生成<完整签名与交易数据2>
买家:  sendrawtransaction <完整签名与交易数据2>
发款完成。。已将<收款地址C>上的钱转给商家了

以上比较麻烦,现在没界面做,所以比较蛋疼。
------------  不确认到货,要求<收款地址C>上的钱打回来 -------
然后再说说不确认到货、退款的流程,其实都差不多的,但有个前提条件,那就是上面的[确认到货]没有做过,即<收款地址C>里的钱还未转到<商家收款地址>上。
先与商家协商好,确认可以退款。
买家:  createrawtransaction '[{"txid":"<交易ID>","vout":0}]' '{"<买家自己的任意收款地址>":<币值>}'
买家:  signrawtransaction <16进制的交易数据1>
相同,也会生成<部分签名与交易数据1>,也是发给商家,等商家确认签名退款。

商家先对<部分签名与交易数据1>检查,先确实是从<p2p担保地址C>里转币出去的,防止转的是自己其他地址的币。(这部分原文档上是没有的,我这里加上去。)
商家:  decoderawtransaction  <部分签名与交易数据1>
检查vin.txid = <交易ID>,确认是对的,则输入
商家:  signrawtransaction <部分签名与交易数据1>
会生成<完整签名与交易数据2>
商家:  sendrawtransaction <完整签名与交易数据2>
-------
OVER。
(以上的有关签名或交易数据,若是json数据{},则一般是复制hex字段.)

需要注意的,
1,在以上操作中,没有第三人协调,要是双方协调不了,那币就死在收款地址上了。(当然你可以考虑法庭来帮忙,强制要求他做)
2,一开始的收款地址A与收款地址B不能丢,即,不能换钱包,否则签名时会失败。
3,由于是两次转账,所以需要付两次全网手续费。
4,若两者的createrawtransaction搞混了,可以用decoderawtransaction 检查下发款金额,目标收款地址,和币来源的交易ID(不是发款地址哦,要看发款地址还需要再查一下前交易内容)

---------
补充 addmultisigaddress 的第二个参数是决定至少需要几个人的签名才可以提币。
换句话说,这里可以加入第三人协调
addmultisigaddress 2 '["<pubkey_商家A>","<pubkey_买家B>","<pubkey_第三方裁定人C>"]' 
这样,只需要其中两人,即可转币,可以实现第三方裁判.
--------

下载文件:Screen Shot 2014-07-23 at 6.15.37 PM(1)

 

0

评论Comments

日志分类
首页[193]
flash As[107]
有的没的[59]
数码照片[4]
自由世界[19]
blender[4]