参考:http://bbs.btcman.com/thread-1311-1-2.html
帮助-调试窗口-控制台:
商家A输入, validateaddress <商家的任意收款地址>
获得公钥 pubkey_A ,并对外公开。
getnewaddress mmCNcSDvkbm4itzUsUaw2UEuQL4m1WbNi2
validateaddress mmCNcSDvkbm4itzUsUaw2UEuQL4m1WbNi2
02359bf483d557b12d121d49ae0a835753c75c471dc7ebd44130d5da341e843a9c (pubkey_A)
买家B输入,validateaddress <自己的任意收款地址>
获得公钥 pubkey_B,
getnewaddress mzM6vZ9ubb7pV3u5KEkFWCXFK6vvwMw4zs
validateaddress mzM6vZ9ubb7pV3u5KEkFWCXFK6vvwMw4zs
0210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39d (pubkey_B)
然后再输入 addmultisigaddress 2 '["",""]' // 记得替换掉啊。<>符号也替换掉,下同。
则可生成多重签名的<收款地址C>
addmultisigaddress 2 "[\"02359bf483d557b12d121d49ae0a835753c75c471dc7ebd44130d5da341e843a9c\",\"0210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39d\”]"
2N5LMhodfmbxwHa94rAX4nGfteMb7t99UUD (收款地址_C)
买家发币给<收款地址C>, 并把pubkey_B还有交易ID发给商家
sendtoaddress 2N5LMhodfmbxwHa94rAX4nGfteMb7t99UUD 0.11
88ed7174bc580c50e05404504e7d9ac94c3a4157d981fbe31ec7df8cd19fa092 (交易ID)
等待全网确认。
此时<收款地址C>,需要商家A和买家B同时签名,才能转币出去,也就是P2P担保地址。
商家收都买家发来的信息时,先检查买家确实是发给担保地址,输入
商家: addmultisigaddress 2 '["",""]'
addmultisigaddress 2 "[\"02359bf483d557b12d121d49ae0a835753c75c471dc7ebd44130d5da341e843a9c\",\"0210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39d\”]"
2N5LMhodfmbxwHa94rAX4nGfteMb7t99UUD (
收款地址_C)
则可获得<收款地址C>,可检查买家确实是发送币到< P2P担保地址 - 收款地址C>上。
若相同,则可以确认是
与你相关
的担保地址,则可以发货。否则是假的。
getrawtransaction 88ed7174bc580c50e05404504e7d9ac94c3a4157d981fbe31ec7df8cd19fa092 1
21:36:11 |
|
{ "hex" : "0100000001853740f10b659192f7049eab388f19ecd86ef5775932ad83a012d2c6449f1b85010000006a47304402207c02df0d58c06385e06f2f7488473060b7f8fbaacaee06f8c2d1519fdc05cae8022076db45927677366fe4ade4a391c7229e87e22e8af69dede2d345a05bbfbaedc301210210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39dfeffffff0228821e00000000001976a9149af2b48e5327e7f9e77f3047e5f2c872b40c502c88acc0d8a7000000000017a914849a07b4e66aed7443cd6f7b3ded78c270b47eb9876d200700", "txid" : "88ed7174bc580c50e05404504e7d9ac94c3a4157d981fbe31ec7df8cd19fa092", "version" : 1, "locktime" : 467053, "vin" : [ { "txid" : "851b9f44c6d212a083ad325977f56ed8ec198f38ab9e04f79291650bf1403785", "vout" : 1, "scriptSig" : { "asm" : "304402207c02df0d58c06385e06f2f7488473060b7f8fbaacaee06f8c2d1519fdc05cae8022076db45927677366fe4ade4a391c7229e87e22e8af69dede2d345a05bbfbaedc301 0210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39d", "hex" : "47304402207c02df0d58c06385e06f2f7488473060b7f8fbaacaee06f8c2d1519fdc05cae8022076db45927677366fe4ade4a391c7229e87e22e8af69dede2d345a05bbfbaedc301210210d70075bc334a6e91afdaf3b472b30345f47738fc9efa6af926de0371f4c39d" }, "sequence" : 4294967294 } ], "vout" : [ { "value" : 0.01999400, "n" : 0, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 9af2b48e5327e7f9e77f3047e5f2c872b40c502c OP_EQUALVERIFY OP_CHECKSIG", "hex" : "76a9149af2b48e5327e7f9e77f3047e5f2c872b40c502c88ac", "reqSigs" : 1, "type" : "pubkeyhash", "addresses" : [ "mueF74B9VinaTKNPhsDeGWyAjYtNoLWR27" ] } }, { "value" : 0.11000000, "n" : 1, "scriptPubKey" : { "asm" : "OP_HASH160 849a07b4e66aed7443cd6f7b3ded78c270b47eb9 OP_EQUAL", "hex" : "a914849a07b4e66aed7443cd6f7b3ded78c270b47eb987", "reqSigs" : 1, "type" : "scripthash", "addresses" : [ "2N5LMhodfmbxwHa94rAX4nGfteMb7t99UUD" ] } } ], "blockhash" : "0000000000002c659e0b611e1772e52ebf58de107e81da61cbfff35203636bd0", "confirmations" : 2, "time" : 1434375357, "blocktime" : 1434375357 } |
另外的,Bitcoin的 有个直观的特点, 其是以3xxxxx开头的收款地址(2开头的是测试网络的)
此时买家可以等到货确认了。
----------- 确认到货 -------
如果确认到货的话,则需要输入.
商家: createrawtransaction '[{"txid":"<交易ID>","vout":0}]' '{"<商家的任意收款地址>":<币值>}'
会生成:会生成<16进制的交易数据1>
createrawtransaction "[{\"txid\":\"88ed7174bc580c50e05404504e7d9ac94c3a4157d981fbe31ec7df8cd19fa092\",\"vout\":0}]" "{\"mmCNcSDvkbm4itzUsUaw2UEuQL4m1WbNi2\":0.11}"
010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed880000000000ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000 <16进制的交易数据1>
以上<交易ID>是之前发送给<收款地址C>时的交易ID,在买家发送时候会有生成,也可以blockchain或交易记录上查询,一般需要买家提供信息才行。
商家: signrawtransaction <16进制的交易数据1>
会生成 <部分签名与交易数据1>
signrawtransaction 010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed880000000000ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000
{
"hex" : "010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed880000000000ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000",
"complete" : false
}
将生成的<部分签名与交易数据1>,发给买家,需要买家来签名。
以上操作可以提早做,比如在发货的同时,发给的买家的。
/////
买家拿到商家的<部分签名与交易数据1>,先检查下确实是从里转币出去的,防止转的是自己其他地址的币。
(这部分原文档上是没有的,我这里加上去。)
买家: decoderawtransaction <部分签名与交易数据1>
decoderawtransaction 010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed880000000000ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000
22:11:50 |
|
{ "txid" : "b081e7f08a93fe32b99eb22a3299d667c91e99ef98875df20f8d52f652f18fd5", "version" : 1, "locktime" : 0, "vin" : [ { "txid" : "88ed7174bc580c50e05404504e7d9ac94c3a4157d981fbe31ec7df8cd19fa092", "vout" : 0, "scriptSig" : { "asm" : "", "hex" : "" }, "sequence" : 4294967295 } ], "vout" : [ { "value" : 0.11000000, "n" : 0, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 3e4d2671eafe425b0839c4e422940499b4096ffd OP_EQUALVERIFY OP_CHECKSIG", "hex" : "76a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac", "reqSigs" : 1, "type" : "pubkeyhash", "addresses" : [ "mmCNcSDvkbm4itzUsUaw2UEuQL4m1WbNi2" ] } } ] } |
检查vin.txid = <交易ID>,确认是对的,则输入
买家: signrawtransaction <部分签名与交易数据1>
会生成<完整签名与交易数据2>
signrawtransaction 010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed880000000000ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000
{
"hex" : "010000000192a09fd18cdfc71ee3fb81d957413a4cc99a7d4e500454e0500c58bc7471ed88000000006a4730440220278bd3c75cf59556787806c703655b2fd023b21106aed8a63f9326c8926dd8e102206766077cd3d8fabc66b23f21c319ac4a57d88d75642c6e64d224e2633e2526e201210251afa1b664d9ab9b1fc59773b452401dfff8d7578c4fd671d673a867930bf6e9ffffffff01c0d8a700000000001976a9143e4d2671eafe425b0839c4e422940499b4096ffd88ac00000000",
"complete" : true
}
买家: sendrawtransaction <完整签名与交易数据2>
发款完成。。已将<收款地址C>上的钱转给商家了
以上比较麻烦,现在没界面做,所以比较蛋疼。
------------ 不确认到货,要求<收款地址C>上的钱打回来 -------
然后再说说不确认到货、退款的流程,其实都差不多的,但有个前提条件,那就是上面的[确认到货]没有做过,即<收款地址C>里的钱还未转到<商家收款地址>上。
先与商家协商好,确认可以退款。
买家: createrawtransaction '[{"txid":"<交易ID>","vout":0}]' '{"<买家自己的任意收款地址>":<币值>}'
买家: signrawtransaction <16进制的交易数据1>
相同,也会生成<部分签名与交易数据1>,也是发给商家,等商家确认签名退款。
商家先对<部分签名与交易数据1>检查,先确实是从里转币出去的,防止转的是自己其他地址的币。
(这部分原文档上是没有的,我这里加上去。)
商家: 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 '["","",""]'
这样,只需要其中两人,即可转币,可以实现第三方裁判.
--------