衆所周至,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
做者:李劍英