众所周至,NEOGUI是一个开发者演示用钱包,使用体验是很是的不友好的。html
今天原本打算使用多方签名帐户,发现和想象的不同,请教了小伙伴也不行。遂调试了一下缘由,发现踩进坑里了。测试
把这个问题记录一下,但愿之后用到的小伙伴能够顺利实施3d
首先准备两个key调试
Key1地址 ALjSnMZidJqd18iQaoCgFun6iqWRm2cVtjcdn
Key1公钥 02aa792c61ffe03d92bb505969fe81e2c345682a9c0ba38596275f3a31f6da6e5fhtm
Key2地址 AcfWad6TSjQbfrjyhkTuEPDRrYWYQC9zHDblog
Key2公钥 02a763b5d3bf02cbb4d7e03eb9b060021324d6074bcff046d9846fe3ae1cdc5031索引
我是不会给你私钥的,此处你应该准备本身的Key一、key2开发
为了测试的纯洁,新建一个钱包,随钱包生成的地址删了,不要了get
新建多方签名
把key1公钥和key2公钥填进去,设置最小签名数量2.
意味着咱们建立一个这两个地址都要签名的多方签名。
而后往这个多方签名地址里转点钱,这个都很顺利。
若是转帐后、同步后多方签名地址里不能顺利显示余额,那你就
重建一下索引
好了,咱们给这个多方签名地址里面转入154gas,如今尚未什么问题
而后,问题就来了
怎么从这个合约地址里面转帐出来
首先
转到一个地址15个GAS
此时就会获得一个交易构造,但没有签名的对话框。很好,此时正常。
而后只要把这串东西发给一个key的拥有者签名
而后签名以后再发给另外一个key的拥有者签名并广播
15个gas就能够取出来了。
理论如此,但有一些小坑
咱们假定key1的拥有者准备签名了,那么key1的拥有者是否是可能为这个需求新建一个钱包呢,极可能,新建一个钱包,导入key1,执行签名。
好,咱们来试一试。
Key1拥有者新建钱包,导入key1
而后签名你会获得
这是由于根据
这串东西,找不到和key1的关系
咱们能够分析一下他生成的交易,这个交易有一个输入
交易的输入是一个UTXO
他指向的地址是Ayx……xR4,就是多方签名合约
因此,实际上是须要多方签名合约来提供鉴证信息的。
好,新建多方签名
再执行一次签名,你会成功
而后咱们把输出的这串东西交给Key2拥有者
咱们假定key2的拥有者准备签名了,key2的拥有者思路不太同样,他也为了清晰新建了一个钱包,而后先建立了多方签名合约,再导入了Key2,而后签名
而后key2拥有者会获得这个问题,明明有多方签名地址,也有key2,为何还会没有这个信息呢。
这个地方就要解释一下源码了。观察了多方签名建立的代码
他是这个样子的,具体的关系就是。
多方签名合约对话框从多个签名中找一个key,只有我钱包里面能找到一个key,才能返回。
那就要求了建立多方签名合约时,你要想让这个钱包能用来签名,它里面必须有一个多方签名里面用到的key,并且只能有一个
由于你有两个Key,建立多方签名也只能关联一个key,并且很难判断关联的究竟是哪一个。
第二次失败的缘由明确了
必须先导入key2,再建立多方签名地址
修改后正常
点广播,钱取走
使用NEOGUI操做多方签名合约。
须要注意
1.一个钱包里的多方签名合约只能关联一个KEY,若是没有KEY,他就不能用来签名。
也就是说若是你须要三个签名,你就须要三个钱包。
2.只有当前钱包中有KEY的状况下建立多方签名合约才会关联上。
产生转帐交易
须要多方签名合约,无需关联KEY
签名1
须要多方签名合约,KEY1,多方签名合约必须关联KEY1
签名2
须要多方签名合约,KEY2,多方签名合约必须关联KEY2
进技术群讨论:795681763
做者:李剑英