刚刚在电报上看到一个好问题:
所以我正在研究一种算法,可以下载和处理比特币块,特别是其中的交易。我想获取块中每个事务的每个输出地址,并查询我的数据库,如果有任何用户拥有这个地址作为他们的存款地址。最初我认为一个输出只能有一个地址,所以我可以把输出的数量归功于拥有它的人。但现在我发现一个输出实际上可以有多个地址,这就叫multisig。我真的不明白这个概念。所以,如果一个人用我给他的存款地址作为第一个地址,他们也用自己的另一个地址作为第二个地址在一个输出中呢?他们能用他们的地址输出浪费它,所以我失去了钱,他们存放?
多重签名
分享
改进这个问题
跟随
8月19日7点18分被问到
海湾X
14166青铜徽章
添加评论
2个答案
0
不,当多个实体一起创建一个multisig地址时,它仍然是一个地址。只是持有资金的锁定脚本需要多个签名才能允许资金发送。因此,当您编写索引器时,您可能首先不需要区分singlesig和multisig地址。
分享
改进这个答案
跟随
8月2日19:19回复
墨奇♦
52.9K33232金徽章147147银徽章460460铜徽章
添加评论
0
看看这个交易
055F9C6DC094CF21FA24E1EB4A54EE3CC44AE9DAA8AA47F98DF5C73C48997F9(比特币主网)
(https://www.blockchain.com/btc/tx/055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9)
但是,web资源管理器无法正确呈现这些内容,因此,如果使用自己的节点对其进行解码,将得到以下结果:
{
“txid”:“055F9C6DC094CF21FA24E1EB4A54EE3CC44AE9DAA8AA47F98DF5C73C48997F9”,
“版本”:1,
“锁定时间”:0,
“vin”:[
{
“txid”:“b187426f2fdd5a7ac2f49d822f68e07f48486ee53a8a45de2494f12acb37a0d8”,
“vout”:3,
“脚本签名”:{
“asm”:“3046022100D78C31A20FA11533475BE893B229EB4D252E600DCC2A0735D360C541B6AEC813022100E3EAA72C915EF47D94CCBD18C2BA6D9AE5B98BE6E9FBF968D4BB003E06D68701030E001332B43924BE343986CCA3D66F57B0DEDD120990E727787F8DEA50FDBC”
},
“序列”:4294967295,
“n”:0,
“addr”:“1FrbMcddiM1v3HMpUqygjZYCamBykWCWao”,
“增值税”:1114144,
“值”:0.011114144,
“doubleSpentTxID”:空
}
],
“vout”:[
{
“value”:“0.00010860”,
“n”:0,
“scriptPubKey”:{
“asm”:“1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20434E545254590000014001A9E0E85838B5000000174876E800010053B6 2 OP\ U CHECKMULTISIG”,
“需求信号”:1,
“type”:“multisig”,
“地址”:[
“1FrbMcddiM1v3HMpUqygjZYCamBykWCWao”,
“HT7XU2NGENF7D4YOCZ2SACNNLW7RK8D4E”
]
}
},
{
“value”:“0.00010860”,
“n”:1,
“scriptPubKey”:{
“asm”:“1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20a3c3000000000000000000000000002操作检查多西格”,
“需求信号”:1,
“type”:“multisig”,
“地址”:[
“1FrbMcddiM1v3HMpUqygjZYCamBykWCWao”,
“HT7XU2NGENF7D4YOCZ2SACNNLW7RK8D4E”
]
}
},
{
“value”:“0.00010860”,
“n”:2,
“scriptPubKey”:{
“asm”:“1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 10000000000000000000000000000000002 OP\u CHECKMULTISIG”,
“需求信号”:1,
“type”:“multisig”,
“地址”:[
“1FrbMcddiM1v3HMpUqygjZYCamBykWCWao”,
“HT7XU2NGENF7D4YOCZ2SACNNLW7RK8D4E”
]
}
},
{
“value”:“0.01061564”,
“n”:3,
“scriptPubKey”:{
“asm”:“opu DUP opu HASH160 a2f2d251cc06ec1e789800127e3fa6ed9e515651 opu EQUALVERIFY opu CHECKSIG”,
“需求信号”:1,
“type”:“pubkeyhash”,
“地址”:[
“1FrbMcddiM1v3HMpUqygjZYCamBykWCWao”
]
}
}
],
“blockhash”:“0000000000000000491FDF68A1C99DE7798278A791E461B8D5BEBDD9DF9DE46”,
“确认”:1,
“时间”:1401911255,
“封锁时间”:1401911255,
“valueOut”:0.01094144,
“尺寸”:433,
“值in”:0.011114144,
“费用”:0.0002
}
事实上,我是问这个问题的人,经过大量的研究,我很确定这种交易不会发生在一个场景中
事实上,我是问这个问题的人,经过大量的研究,我很确定这种交易不会发生在你给你的用户提供唯一的比特币存款地址的情况下。我想这只会发生在地址被故意做成multisig的时候,然而,我不知道如何和为什么。
我做了一个小实验,制作了一个testnet multisig地址,并向它发送了一些资金。我原以为它会像上面的交易一样,但事实并非如此。我认为这是因为必须有一个不同类型的脚本,我想知道它是什么,以及如何使用它。
以下是我所做的:
首先我创建了两个新地址。
index@LAPTOP-QHUBB7MI:~$btc获取新地址
型号:YMSH332CTOU3DYXVE5POTW4FLP2O
index@LAPTOP-QHUBB7MI:~$btc获取新地址
2N2YDROTCHGRD675GJ12JE3WXZK3HMZGOP型
然后我用getaddressinfo rpc得到了它们的公钥。
index@LAPTOP-QHUBB7MI用法:~$btc GETADDESINFO 2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o
{
“address”:“2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o”,
“scriptPubKey”:“a9140254bfce5627cc6267eb2aa75dce00f03bc13dc87”,
“ismine”:没错,
“可解”:没错,
…
“pubkey”:“02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8”,
…
}
index@LAPTOP-QHUBB7MI:~$btc getaddressinfo第二代Tortchgrd675gJ12je3wxzk3hmzgop
{
“地址”:“2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP”,
“scriptPubKey”:“a9146aaa8606a93804de00e4e91c683dbfd5e1caa7d887”,
“ismine”:没错,
“可解”:没错,
…
“pubkey”:“0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c6262b1f0e0326”,
…
}
然后我创建了multisig地址。
index@LAPTOP-QHUBB7MI:~$btc createmultisig 1′[“0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e0326”,“02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8”]
{
“address”:“2MU6J8IXWZCGWXJZVNKZFQ8YZWJ92YW6ES”,
“赎回脚本”:“51210236240C39790E770BC0C378EBB1A86D2AC24F835B6E81E69C623262B1F0E03262102D01D8E315567FB3571F31D86EB53D21729C6072751276D0C2617D787D48B2AF852AE”
}
最后,我寄了一些比特币到那个地址。
index@LAPTOP-QHUBB7MI:~$btc发送地址2MU6J8IXWZCGWXJZVNKZFQ8YZWJ92YW6ES 0.00999744
1373FD7A2DA3199E0F4EAD0A5456266B5263356A86B726882DBC03DA1625ED1
我解码了那个事务(Testnet),得到了这个
{
“txid”:“1373fd7a2da3199e0f4ead0a5456266b5263356a86b726882dbc03da1625ed1”,
“hash”:“290a0ec0c306a4485a7099c1f7813d9f9a741a9b4fcc68c5decc68de5ddb1b14”,
“版本”:2,
“尺寸”:338,
“vsize”:173,
“重量”:692,
“锁定时间”:1572217,
“vin”:[
{
“txid”:“7e57de9ce97e8c5face7c3ed7ce89eb3107b05e00c129f336cebc1b1113dcb”,
“vout”:1,
“脚本签名”:{
“asm”:“00205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c”,
“hex”:“2200205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c”
},
“证人”:[
“”,
“304402206B7F9FCDF972A2AA6A734E921D1F76B3DA3A0F7A98E2BF3657241ED0CC4433A022040B1F0F31B6231FF73465986C3379CE15CBF2B33E28B0940AAC8812D8E9826801”,
“304402200ffeeb246535a312f33c05652f9ef5d696fd26883659e6429731e5f0416be9fc022067a5852e99f96c5def0f7288b9a7ba567e3df258fd79071a60694580ac3de1fc01”,
“522103A8F863C198BFA005273AE53D9DB239E3BE2CABCD5CBF34F52318795166F5CDFF2102CFF91271435F4F121AA90F3BABC551090F862575E5EB12429ACB8E6DAF4D8CD52AE”
],
“序列”:4294967294
}
],
“vout”:[
{
“值”:0.00999744,
“n”:0,
“scriptPubKey”:{
“asm”:“OP\u HASH160 143ff7e3677973ecd914d8d134efde5adff4a96b OP\u EQUAL”,
“hex”:“a914143ff7e3677973ecd914d8d134efde5adff4a96b87”,
“需求信号”:1,
“type”:“scripthash”,
“地址”:[
“2mu6j8ixwzcgwxjzvnkzfq8yzwj92yw6es”
]
}
}
]
}
看起来很正常。
尽管我几乎可以肯定在我描述的场景中不会发生这种情况,但我希望有人能够理解这些事务是如何工作的,并对其进行解释。
分享
改进这个答案
跟随