眾所周至,NEOGUI是一個開發者演示用錢包,使用體驗是非常的不友好的。
今天本來打算使用多方簽名賬戶,發現和想象的不一樣,請教了小夥伴也不行。遂除錯了一下原因,發現踩進坑裡了。
把這個問題記錄一下,希望以後用到的小夥伴可以順利實施
準備階段
首先準備兩個key
Key1地址 ALjSnMZidJqd18iQaoCgFun6iqWRm2cVtj
Key1公鑰 02aa792c61ffe03d92bb505969fe81e2c345682a9c0ba38596275f3a31f6da6e5f
Key2地址 AcfWad6TSjQbfrjyhkTuEPDRrYWYQC9zHD
Key2公鑰 02a763b5d3bf02cbb4d7e03eb9b060021324d6074bcff046d9846fe3ae1cdc5031
我是不會給你私鑰的,此處你應該準備自己的Key1、key2
為了測試的純潔,新建一個錢包,隨錢包生成的地址刪了,不要了
新建多方簽名
把key1公鑰和key2公鑰填進去,設定最小簽名數量2.
意味著我們建立一個這兩個地址都要簽名的多方簽名。
然後往這個多方簽名地址裡轉點錢,這個都很順利。
如果轉賬後、同步後多方簽名地址裡不能順利顯示餘額,那你就
重建一下索引
好了,我們給這個多方簽名地址裡面轉入154gas,現在還沒有什麼問題
轉出
然後,問題就來了
怎麼從這個合約地址裡面轉賬出來
轉賬
首先
轉到一個地址15個GAS
此時就會得到一個交易構造,但沒有簽名的對話方塊。很好,此時正常。
然後只要把這串東西發給一個key的擁有者簽名
然後簽名之後再發給另一個key的擁有者簽名並廣播
15個gas就可以取出來了。
理論如此,但有一些小坑
Key1擁有者
我們假定key1的擁有者準備簽名了,那麼key1的擁有者是不是可能為這個需求新建一個錢包呢,很可能,新建一個錢包,匯入key1,執行簽名。
好,我們來試一試。
Key1擁有者新建錢包,匯入key1
然後簽名你會得到
第一次失敗
這是因為根據
這串東西,找不到和key1的關係
我們可以分析一下他生成的交易,這個交易有一個輸入
交易的輸入是一個UTXO
他指向的地址是Ayx……xR4,就是多方簽名合約
所以,其實是需要多方簽名合約來提供鑑證資訊的。
好,新建多方簽名
再執行一次簽名,你會成功
然後我們把輸出的這串東西交給Key2擁有者
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
作者:李劍英
原文轉自:www.cnblogs.com/crazylights…